当前位置: 首页 > news >正文

海南省住房和城乡建设厅官网网站首页造价材料价格信息网

海南省住房和城乡建设厅官网网站首页,造价材料价格信息网,内容网站管理系统,福州网站免费制作一、C#7.0及之前is的使用 is操作符检查表达式的结果是否与给定类型兼容,或者(从c# 7.0开始)根据模式测试表达式。有关类型测试is操作符的信息,请参阅类型测试和类型转换操作符文章的is操作符部分。 1、is 模式匹配 从C&#xff0…

一、C#7.0及之前is的使用

is操作符检查表达式的结果是否与给定类型兼容,或者(从c# 7.0开始)根据模式测试表达式。有关类型测试is操作符的信息,请参阅类型测试和类型转换操作符文章的is操作符部分。

1、is 模式匹配

从C#7.0开始,isswitch语句支持模式匹配。该is关键字支持以下模式:

Type模式:它测试表达式是否可以转换为指定的类型,如果可以,则将其强制转换为该类型的变量。

(Constant)常量模式:用于测试表达式是否求值为指定的常量值。

var模式:匹配成功并且将表达式的值绑定到新的局部变量的匹配。

从C#7.1开始,expr可能具有由通用类型参数及其约束定义的编译时类型。
如果exprtrue并且isif语句一起使用,则varname仅在if语句内分配。varname的范围是从is表达式到包含if语句的块末尾。在其他任何位置使用varname会导致使用尚未分配的变量时产生编译时错误。

1) Type模式

使用类型模式执行模式匹配时,is测试表达式是否可以转换为指定的类型,如果可以,将其强制转换为该类型的变量。这是对is语句的直接扩展,可以实现简洁的类型评估和转换。is类型模式的一般形式是:

  expr is type varname

下面的示例使用is类型模式提供类型的IComparable.CompareTo(Object)方法的实现。

using System;public class Employee : IComparable
{public String Name { get; set; }public int Id { get; set; }public int CompareTo(Object o){if (o is Employee e){return Name.CompareTo(e.Name);}throw new ArgumentException("o is not an Employee object.");}
}

2) (Constant)常量模式

使用常量模式执行模式匹配时,is测试表达式是否等于指定的常量。在C#6和更早版本中,switch语句支持常量模式。从C#7.0开始,该is语句也支持它。其语法为:

expr is constant

以下示例将类型和常量模式组合在一起,以测试对象是否为Dice实例,如果是,则确定掷骰的值是否为6。

using System;
public class Dice
{Random rnd = new Random();public Dice(){}public int Roll(){return rnd.Next(1, 7); }
}
class Program
{static void Main(string[] args){var d1 = new Dice();ShowValue(d1);}private static void ShowValue(object o){const int HIGH_ROLL = 6;if (o is Dice d && d.Roll() is HIGH_ROLL)Console.WriteLine($"The value is {HIGH_ROLL}!");elseConsole.WriteLine($"The dice roll is not a {HIGH_ROLL}!");}
}
// The example displays output like the following:
//      The value is 6!

null可以使用 (Constant)常量进行检查。该语句null支持关键字is。其语法为:

expr is null

示例代码:

using System;
class Program
{static void Main(string[] args){object o = null;if (o is null){Console.WriteLine("o does not have a value");}else{Console.WriteLine($"o is {o}");}int? x = 10;if (x is null){Console.WriteLine("x does not have a value");}else{Console.WriteLine($"x is {x.Value}");}// 'null' check comparisonConsole.WriteLine($"'is' constant pattern 'null' check result : { o is null }");Console.WriteLine($"object.ReferenceEquals 'null' check result : { object.ReferenceEquals(o, null) }");Console.WriteLine($"Equality operator (==) 'null' check result : { o == null }");}// The example displays the following output:// o does not have a value// x is 10// 'is' constant pattern 'null' check result : True// object.ReferenceEquals 'null' check result : True// Equality operator (==) 'null' check result : True
}

3) var模式

与var模式匹配的模式总是成功。它的语法是:

expr is var varname

expr的值总是分配给一个名为varname的局部变量。varname是与expr的编译时类型相同的变量。

如果expr的计算结果为null,则is表达式生成true并将null赋值给varname。var模式是is为数不多的对空值产生true的用法之一。

你可以使用var模式在一个布尔表达式中创建一个临时变量,如下面的例子所示:

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{static void Main(){int[] testSet = { 100271, 234335, 342439, 999683 };var primes = testSet.Where(n => Factor(n).ToList() is var factors&& factors.Count == 2&& factors.Contains(1)&& factors.Contains(n));foreach (int prime in primes){Console.WriteLine($"Found prime: {prime}");}}static IEnumerable<int> Factor(int number) {int max = (int)Math.Sqrt(number);for (int i = 1; i <= max; i++) {if (number % i == 0){yield return i;if (i != number / i) {yield return number / i;}}}}
}
// The example displays the following output:
//       Found prime: 100271
//       Found prime: 999683

二、C# 8.0中is的新语法

属性模式

匹配任何非"null"且属性设置为Length为2的对象,示例代码如下:

if (value is { Length: 2 })
{ 
}

实现验证的示例:

public async Task<IActionResult> Update(string id, ...) 
{if (ValidateId(id) is { } invalid)return invalid;...
}

上面的例子中,ValidateId()可以返回nullBadObjectRequestResult的一个实例。如果返回了前者,验证就成功了,并转移到更新主体的其余部分。如果返回的是后者,则is{}为真(也就是说,当然BadObjectRequestResult的实例是一个对象),验证失败。

如果使用一般写法做个判断,可能需要更多的代码,如下:

public async Task<IActionResult> Update(string id, ...) 
{var invalid = ValidateId(id);if (invalid != null)return invalid;...
}

相关文档:The `is` operator - Match an expression against a type or constant pattern - C# | Microsoft Learn

http://www.yayakq.cn/news/105479/

相关文章:

  • 网站运营与建设wordpress淘宝客单页主题
  • ps加dw做网站视频牡丹江地区做网站的公司
  • 老河口网站定制如何做网站设计
  • 百度网站下拉怎么做个人建站公司
  • 网站建设推广浩森宇特郑州官方网
  • 做网站需要多少兆空间大连专业网站设计服务商
  • 西安哪家网站公司做的比较好网站建设软件免费
  • 泰安集团网站建设价格做手机软件需要学什么
  • WordPress网站加载时间代码制作
  • 看公狍和女人做爰网站wordpress文章只能会员才能看
  • 推进网站集约化建设的作用wordpress 主题搜索框
  • 海南住房建设厅网站网络营销的缺点及建议
  • 网站销售都怎么做的温州微网站开发
  • 网站开发与管理能力iis访问网站打开要很久
  • 生成链接泰州百度seo公司
  • 网站流量大小对网站有什么影响石家庄live公众号
  • 官方网站娱乐游戏城做外链网站有哪些
  • 用什么语言做网站电子商务网上购物网站建设规划
  • 广东网站建设哪家有wordpress引导页模板
  • 渭南网站建设服务国外服务器 网站进行经营性活动
  • 怎么做网店网站网页设计与制作教程第五版课后答案
  • 企业网站seo点击软件网站制作有哪些技术
  • 网站系统升级中郑州模板建站定制网站
  • 杭州如何做百度的网站石嘴山网站建设公司
  • 破解要钱网站吉林做网站公司
  • 广州西樵网站制作手机发布 wordpress文章
  • 水墨网站模板郑州千锋教育
  • 宁波制作网站哪个好舟山网站建设优化
  • 房产网站方案大连专业网站建设
  • 嘉兴市建设教育网站重庆报考网