如果 is 运算符返回 true,则 as 运算符的结果是否可以为 null

本文关键字:运算符 是否 结果是 null 结果 as 返回 is true 如果 | 更新日期: 2023-09-27 18:30:37

我正在使用代码质量工具,他们说我可以在以下块样式的第 3 行上有一个空尊重:

1    if(var1 is Type1)
2    {
3         (var1 as Type1).methodCall();
4    }

它建议进行以下更改:

1    Type1 tempVar = var1 as Type1; 
2    if(tempVar != null)
3    {
4         tempVar.methodCall();
5    }

这如何改变空顺从异常的可能性?根据 msdn 的说法,如果"提供的表达式为非空,并且提供的对象可以强制转换为提供的类型而不会引发异常",则返回 true。(http://msdn.microsoft.com/en-us/library/scekt9xw.aspx)

var1 is Type1的计算结果为

True,但var1 as Type1计算结果为 null。或者这是不可能的,只是代码质量工具的限制。

我正在使用喷气脑重新锐利和马力强化。

如果 is 运算符返回 true,则 as 运算符的结果是否可以为 null

您的第一个程序可能引发 NRE 的唯一方法是var1检查后和方法调用之前可能从另一个线程突变。 假设您不需要协调来自另一个线程的突变(或已经有适当的同步),这是代码分析工具的误报,您的原始代码不会抛出 NRE。

如果

另一个线程可以访问var1的值,则的值可能会在isas之间更改。

即使在您的特定情况下不太可能,甚至不可能,建议的代码也完全不受此类更改的影响,因此这是一种很好的做法。

建议的代码也只执行一次类型检查,因此它的性能甚至略好一些。即使性能差异并不总是显著的,它仍然意味着您可以免费获得更好的代码。