经过一些关于“空取消引用”的测试后,下面的代码可以“取消引用空指针,从而引发NullException”。
if((validateControl as WebControl) != null)
(validateControl as WebControl).CssClass (IsValid) ? "stack" : "overflow";
可以(validateControl as WebControl).CssClass为null,上面使用?
结果见文件由Fortify制作。
答案 0 :(得分:10)
如果false
不是WebControl
,则为true
,否则为bool isWebControl = validateControl is WebControl;
:
null
如果WebControl
不是WebControl
,则为WebControl webControl = validateControl as WebControl;
,否则为(validateControl as WebControl)
:
as
as
可以为空吗?是的,每次使用WebControl webControl = validateControl as WebControl;
if (webControl != null)
{
// Here 'webControl' is surely _not_ null.
webControl.CssClass = Page.IsValid ? "stack" : "overflow";
}
时,理论上结果可能是 null。代码分析工具没有看到您刚检查它不是null,并且仍然假设下一次使用(validateControl as WebControl).CssClass
可能为null。所以你应该把它放在一个变量中,然后使用它:
CssClass
CssClass
可以为空吗?您从validateControl
获得的值可能为null。但由于WebControl
是一个属性,只要{{1}}是{{1}},该属性就会一直存在。
答案 1 :(得分:2)
如何重新格式化代码以使其更加明确。
var webControl = validateControl as WebControl;
if(webControl != null)
{
var cssClass = IsValid ? "stack" : "overflow";
webControl.CssClass = cssClass;
}
答案 2 :(得分:0)
是的,它可以。 如果它很重要,一旦你知道validateControl不是null并且是一个WebControl,那么你测试CssClass的可空性,可能是空的或只是空格,这取决于“有效”意味着什么