繁体   English   中英

C#中的空解除引用控制

[英]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;

如果不是WebControlWebControl 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是属性,因此只要validateControlWebControl ,该属性将始终存在。

重新格式化代码以使其更加明确。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM