C# 运算符的简化操作(三):is 运算符 as 运算符

03 is 运算符

is 运算符可以检查对象是否与特定的类型兼容。短语 “ 兼容 ” 表示对象或者是该类型,或者派生自该类型。例如,要检查变量是否与 object 类型兼容,可以使用下面的代码:.

int i =10;if ( i is object ){   Console.WriteLine("i is an object");}

int 和所有 C#数据类型一样,也从 object 继承而来;在本例中,表达式 i is object 将为 true,并显示相应的消息。

C#7 扩展了具有类型匹配的 is 运算符。可以检查常量、类型和 var。下面的代码片段显示了常量检查的示例,它检查常量 42 和常量 null:

int i = 42;  if (i is 42){  Console.WriteLine("i has the value 42");}object o = null;if (o is null){  Console.WriteLine("o is null");}

使用具有类型匹配的 is 运算符,可以在类型的右边声明变量。如果 is 运算符返回true,则该变量通过对该类型的对象的引用来填充。然后,可以在使用 is 运算符的 if语句范围内使用该变量:

public static void AMethodUsingPatternMatching(object o){  if (o is Person p)  {   Console.WriteLine($"o is a Person with firstname {p.FirstName}");  }}//...AMethodUsingPatternMatching (new Person("Katharina", "Nagel"));

04 as 运算符

as 运算符用于执行引用类型的显式类型转换。如果要转换的类型与指定的类型兼容,转换就会成功进行;如果类型不兼容,as 运算符就会返回 null 值。如下面的代码所示,如果 object 引用实际上不引用 string 实例,把 object 引用转换为 string 就会返回 null:

object ol = "Some String";object o2 = 5;string s1 = ol as string;  // sl = "Some string" string s2 = o2 as string;  // s2 = null

as 运算符允许在一步中进行安全的类型转换,不需要先使用 is 运算符测试类型,再执行转换。