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

兔子码农
4 声望1 粉丝

一个酒晕子