经过一些关于"空取消引用"的测试后,下面的代码可以"取消引用空指针,从而引发NullException".
if((validateControl as WebControl) != null)
(validateControl as WebControl).CssClass (IsValid) ? "stack" : "overflow";
Run Code Online (Sandbox Code Playgroud)
可以(validateControl as WebControl).CssClass为null,上面使用?
结果见于由Fortify生成的文档中.
Dan*_*ker 10
false当它不是一个时WebControl,得到它,true否则:
bool isWebControl = validateControl is WebControl;
Run Code Online (Sandbox Code Playgroud)
为了得到null时,它不是一个WebControl,和WebControl以其他方式:
WebControl webControl = validateControl as WebControl;
Run Code Online (Sandbox Code Playgroud)
(validateControl as WebControl)为空吗?是的,每次使用时as,理论上结果可能为空.代码分析工具没有看到您刚检查它不是null,并且仍然假设下次使用as可能为null.所以你应该把它放在一个变量中并使用它代替:
WebControl webControl = validateControl as WebControl;
if (webControl != null)
{
// Here 'webControl' is surely _not_ null.
webControl.CssClass = Page.IsValid ? "stack" : "overflow";
}
Run Code Online (Sandbox Code Playgroud)
(validateControl as WebControl).CssClass为空吗?您获得的值CssClass可能为null.但既然CssClass是财产,财产将永远存在,只要validateControl是WebControl.