我正在使用代码质量工具,他们说我可以在第3行的以下块样式中使用null deference:
1 if(var1 is Type1)
2 {
3 (var1 as Type1).methodCall();
4 }
Run Code Online (Sandbox Code Playgroud)
它消化了以下变化:
1 Type1 tempVar = var1 as Type1;
2 if(tempVar != null)
3 {
4 tempVar.methodCall();
5 }
Run Code Online (Sandbox Code Playgroud)
这如何改变null deference异常的可能性?根据msdn,如果"提供的表达式为非null,则返回true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常." (http://msdn.microsoft.com/en-us/library/scekt9xw.aspx)
什么senerio在哪里var1 is Type1评估为True,但var1 as Type1评估为null.或者这是不可能的,只是代码质量工具的限制.
我正在使用jetbrains re-sharper和hp fortify.
Ser*_*rvy 10
第一个程序抛出NRE的唯一方法是var1在检查之后和方法调用之前是否可能从另一个线程变异.假设您不需要协同处理来自另一个线程的突变(或者已经有适当的同步),这是代码分析工具的误报,并且您的原始代码不会抛出NRE.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |