是否有理由使用is as?

jdp*_*nix 3 c# type-conversion

在考虑C#中的isvs as时,您可以使用其中一个来确认某个类型是否可以转换为其他类型.

// using is
Employee e = new Manager();
if (e is Manager) { 
    var m = (Manager) e; 
    // m is now type `Manager`
}

// using as
Employee e = new Manager(); 
Manager m = e as Manager; 
// m is now type `Manager`
if (m != null) { 

}
Run Code Online (Sandbox Code Playgroud)

我理解这两个操作符的工作方式以及如何使用它们.考虑is操作员在as检查一次时检查类型两次,并且它们对它们支持的转换类型有相同的限制,是否有令人信服的理由使用is

标记的副本是询问两个运算符之间的区别.我的问题是具体问"理解两者的作用,为什么要使用is?" 它们不是同一个问题,也没有相同的答案.

Mic*_*Liu 12

您必须使用is而不是as目标类型是非可空值类型时:

object obj = 0;
int i = obj as int; // compilation error because int can't represent null

if (obj is int)
{
    int j = (int)obj; // works
}
Run Code Online (Sandbox Code Playgroud)