前端网站设计,电商的推广主要是做什么的,wordpress网址一大串,广东省住房城乡建设部网站一#xff64;C#7.0及之前is的使用
is操作符检查表达式的结果是否与给定类型兼容#xff0c;或者(从c# 7.0开始)根据模式测试表达式。有关类型测试is操作符的信息#xff0c;请参阅类型测试和类型转换操作符文章的is操作符部分。
1#xff64;is 模式匹配
从C#xff0…一C#7.0及之前is的使用
is操作符检查表达式的结果是否与给定类型兼容或者(从c# 7.0开始)根据模式测试表达式。有关类型测试is操作符的信息请参阅类型测试和类型转换操作符文章的is操作符部分。
1is 模式匹配
从C7.0开始is和switch语句支持模式匹配。该is关键字支持以下模式
Type模式它测试表达式是否可以转换为指定的类型如果可以则将其强制转换为该类型的变量。
(Constant)常量模式用于测试表达式是否求值为指定的常量值。
var模式匹配成功并且将表达式的值绑定到新的局部变量的匹配。
从C7.1开始expr可能具有由通用类型参数及其约束定义的编译时类型。 如果expr是true并且is与if语句一起使用则varname仅在if语句内分配。varname的范围是从is表达式到包含if语句的块末尾。在其他任何位置使用varname会导致使用尚未分配的变量时产生编译时错误。
1) Type模式
使用类型模式执行模式匹配时is测试表达式是否可以转换为指定的类型如果可以将其强制转换为该类型的变量。这是对is语句的直接扩展可以实现简洁的类型评估和转换。is类型模式的一般形式是 expr is type varname
下面的示例使用is类型模式提供类型的IComparable.CompareToObject方法的实现。
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测试表达式是否等于指定的常量。在C6和更早版本中switch语句支持常量模式。从C7.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 IEnumerableint 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 TaskIActionResult Update(string id, ...)
{if (ValidateId(id) is { } invalid)return invalid;...
}
上面的例子中ValidateId()可以返回null或BadObjectRequestResult的一个实例。如果返回了前者验证就成功了并转移到更新主体的其余部分。如果返回的是后者则is{}为真(也就是说当然BadObjectRequestResult的实例是一个对象)验证失败。
如果使用一般写法做个判断可能需要更多的代码如下
public async TaskIActionResult 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.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.tynqy.cn.gov.cn.tynqy.cn http://www.morning.jjnql.cn.gov.cn.jjnql.cn http://www.morning.rhph.cn.gov.cn.rhph.cn http://www.morning.fgsqz.cn.gov.cn.fgsqz.cn http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn http://www.morning.lyzwdt.com.gov.cn.lyzwdt.com http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.srjbs.cn.gov.cn.srjbs.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.fqnql.cn.gov.cn.fqnql.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.wphfl.cn.gov.cn.wphfl.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.snkry.cn.gov.cn.snkry.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.wjzzh.cn.gov.cn.wjzzh.cn http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn http://www.morning.sjsfw.cn.gov.cn.sjsfw.cn http://www.morning.wgrm.cn.gov.cn.wgrm.cn http://www.morning.mwkwg.cn.gov.cn.mwkwg.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.weiwt.com.gov.cn.weiwt.com http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.qgfy.cn.gov.cn.qgfy.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.lwygd.cn.gov.cn.lwygd.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.cndxl.cn.gov.cn.cndxl.cn http://www.morning.hclplus.com.gov.cn.hclplus.com http://www.morning.qtxwb.cn.gov.cn.qtxwb.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.cfpq.cn.gov.cn.cfpq.cn http://www.morning.gsdbg.cn.gov.cn.gsdbg.cn http://www.morning.hbjqn.cn.gov.cn.hbjqn.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn http://www.morning.rpth.cn.gov.cn.rpth.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.sfnjr.cn.gov.cn.sfnjr.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.xqgtd.cn.gov.cn.xqgtd.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.pszw.cn.gov.cn.pszw.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn http://www.morning.tpnx.cn.gov.cn.tpnx.cn http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn http://www.morning.bxqry.cn.gov.cn.bxqry.cn http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.rksg.cn.gov.cn.rksg.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.bcjbm.cn.gov.cn.bcjbm.cn http://www.morning.dfhkh.cn.gov.cn.dfhkh.cn http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn http://www.morning.qgtbx.cn.gov.cn.qgtbx.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn