is 运算符检查表达式的结果是否与给定的类型相匹配。还可使用 is 运算符将表达式与模式相匹配,如下例所示:
static bool Is十月的第一个星期五 ( DateTime 日期 ) => 日期 is { Month : 10 , Day : <= 7 , DayOfWeek : DayOfWeek . Friday };
DateTime RQ = new ( 2000 , 10 , 6 );
Console . WriteLine ( $"{RQ:yyyy 年 MM 月 dd 日(dddd)}:{IsFirstFridayOfOctober ( RQ )}" );
上例输出 True(2000 年的 10 月 6 日确实是该月第一个星期五)。
在前面的示例中,is 运算符将表达式与关系模式和带有嵌套常量的属性模式相匹配。
is 运算符在以下应用场景中很有用:
- 检查表达式的运行时类型,如下例所示:
static void Main(string[] args)
{
int zhs = 34;
object DX封箱 = zhs;
int? zhs可空 = 42;
if ( DX封箱 is int a && zhs可空 is int b )
{
Console . WriteLine ( a + b ); // 输出 76
}
}
上例演示声明模式的用法。
- 检查是否为 null,如下例所示:
string FF ( string? 输入 )
{
if ( 输入 is null )
{
Console . WriteLine ( "null" );
}
else
{
Console . WriteLine ( $"{输入}" );
}
}
将表达式与 null 匹配时,编译器保证不会调用用户重载的“==”或“!=”运算符。
可使用否定模式执行非 null 检查,如下例所示:
string FF ( string? 输入 ) { if ( 输入 is not null ) { Console . WriteLine ( $"{输入}" ); } else { Console . WriteLine ( "null" ); } }
- 从 C# 11 开始,可以使用列表模式来匹配列表或数组的元素。以下代码检查数组中处于预期位置的整数值:
int[] empty = [ ];
int[] one = [ 1 ];
int[] odd = [ 1 , 3 , 5 ];
int[] even = [ 2 , 4 , 6 ];
int[] fib = [ 1 , 1 , 2 , 3 , 5 ];
Console . WriteLine ( odd is [ 1 , _ , 2 , .. ] ); // false(1 不是偶数)
Console . WriteLine ( fib is [ 1 , _ , 2 , .. ] ); // true(1 和 2 包括在斐波那契数列中)
Console . WriteLine ( fib is [ _ , 1 , 2 , 3 , .. ] ); // true(1,2 和 3 包括在斐波那契数列中)
Console . WriteLine ( fib is [ .. , 1 , 2 , 3 , _ ] ); // true
Console . WriteLine ( even is [ 2 , _ , 6 ] ); // true(2 和 6 包括在偶数数组中)
Console . WriteLine ( even is [ 2 , .. , 6 ] ); // true
Console . WriteLine ( odd is [ .. , 3 , 5 ] ); // true(3 和 5 包括在奇数数组中)
Console . WriteLine ( even is [ .. , 3 , 5 ] ); // false
Console . WriteLine ( fib is [ .. , 3 , 5 ] ); // true
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。