使用英语阅读

通过


编译器错误 CS0077

as 运算符必须与引用类型或可以为 null 的类型一起使用(“int”是不可以为 null 值的类型)。

as 运算符传递了 值类型as 可返回 null,因此只能向其传递 引用类型可以为 null 的值类型

但是,通过使用 pattern matching 和 is 操作符,我们可以在一个步骤中直接执行类型检查和赋值。

下面的示例生成 CS0077:

// CS0077.cs  
using System;  

struct S  
{  
}  
  
class M  
{  
   public static void Main()  
   {  
      object o;
      S s;  

      o = new S();
  
      s = o as S;    // CS0077, S is not a reference type

      // Use pattern matching instead of as
      if (o is S sValue)
      {
          s = sValue;
      } 
   }  
}