投射时使用“ is”关键字,然后检查是否为空

时间:2019-05-23 08:04:01

标签: c#

我是C#的新手,只是一个有关使用“ is”关键字的问题。 我看到我的一本教科书正在使用:

if (obj is Person && obj != null)
{
   ...
}

但是obj != null是否多余?

2 个答案:

答案 0 :(得分:0)

is关键字在运行时评估类型兼容性。它确定对象实例或表达式的结果是否可以转换为指定的类型。

if (obj is Person) {
   // Do something if obj is a Person.
}

您还可以检查是否为空。

因此请勿执行空检查。

var obj = new object();              
Console.WriteLine(obj is null);

在这种情况下,其他部分将执行。

             object obj = null;

            if(obj is CustomData)
            {
                Console.WriteLine("Match");
            }
            else
            {
                Console.Write("Null");
            }

尽管有用,但我真的建议不要使用它,而应该使用as。 as关键字是一种防御性强制类型转换,这意味着将尝试强制类型转换,如果无法将对象强制类型转换为提供的类型,则返回null。

我建议您不要使用它的原因,因为它实际上会导致您执行2次强制转换-一种是检查对象是否属于该类型,另一种是实际捕获强制转换的值。

Refer This

Refer This

答案 1 :(得分:0)

我想在这里很简单地向您解释

 Person obj = new Person();
 if (obj is Person && obj!=null){};

Is检查类型,它将返回布尔值true或false。是操作员永远不会抛出错误。是在引用元数据中找到找到对象的类型,然后它将返回true,否则返回false。

Person obj = null;
if (obj is Person){//return always false}

如果您尝试上述代码返回,则始终返回false。

obj!=null

!=是不等式运算符,如果其操作数不相等,则将返回true,否则返回false。

refer documentation "Is"

Equality Operator