[英]Null dereference control in c#
经过一些有关“空取消引用”的测试后,下面的代码可以“取消引用空指针,从而引发NullException”。
if((validateControl as WebControl) != null)
(validateControl as WebControl).CssClass (IsValid) ? "stack" : "overflow";
可以将(validateControl as WebControl).CssClass与上述使用为null吗?
结果可以在Fortify生成的文档中看到。
如果不是WebControl
false
,否则为true
:
bool isWebControl = validateControl is WebControl;
如果不是WebControl
, WebControl
null
,否则为WebControl
:
WebControl webControl = validateControl as WebControl;
(validateControl as WebControl)
可以为null吗? 是的,每次使用as
,理论上结果都可能为空。 代码分析工具看不到您刚刚检查了它是否不为null,并且仍然假设as
的下一次使用可能为null。 因此,您应该将其放在变量中,并改用它:
WebControl webControl = validateControl as WebControl;
if (webControl != null)
{
// Here 'webControl' is surely _not_ null.
webControl.CssClass = Page.IsValid ? "stack" : "overflow";
}
(validateControl as WebControl).CssClass
可以为空吗? 您从CssClass
获得的值可能为null。 但是由于CssClass
是属性,因此只要validateControl
是WebControl
,该属性将始终存在。
重新格式化代码以使其更加明确。
var webControl = validateControl as WebControl;
if(webControl != null)
{
var cssClass = IsValid ? "stack" : "overflow";
webControl.CssClass = cssClass;
}
是的,可以。 如果很重要,一旦知道validateControl不为null且为WebControl,则根据“ valid”的含义对CssClass进行可空性测试,并可能为空或仅空白
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.