c#中的空取消引用控制

时间:2013-04-23 12:27:05

标签: c# fortify

经过一些关于“空取消引用”的测试后,下面的代码可以“取消引用空指针,从而引发NullException”。

if((validateControl as WebControl) != null)
    (validateControl as WebControl).CssClass (IsValid) ? "stack" : "overflow";

可以(validateControl as WebControl).CssClass为null,上面使用?

结果见文件由Fortify制作。

3 个答案:

答案 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的可空性,可能是空的或只是空格,这取决于“有效”意味着什么