【问题标题】:Null Dereference C#空解引用 C#
【发布时间】:2017-05-12 07:04:09
【问题描述】:
if (ddl.SelectedValue != "")

在使用 Fortify 分析我的代码后,Fortify 向我显示了一个漏洞,即“Null Dereference”。

我该如何解决这个问题?

【问题讨论】:

  • ...检查它是否为空或空...?
  • ddl 可能为空
  • @Rob:控件通常是实例化的,但是是的......
  • @MitchWheat 当然 - 但如果 fortify 的行为与其他分析器一样,则此代码上方可能有一个空检查,如果 ddl 为空,则不会跳过此代码路径。

标签: c# null dereference


【解决方案1】:

假设ddl 永远不能为空:

if (!String.IsNullOrEmpty(ddl.SelectedValue)
{

}

否则:

if (ddl != null && !String.IsNullOrEmpty(ddl.SelectedValue)
{

}

【讨论】:

  • 只是出于兴趣,为什么要IsNullOrEmpty 而不是!= "" 检查?在这两种情况下,ddl 永远不能为空(第一种是“假设”,第二种是显式检查)。
  • 因为 selectedvalue 可能为 null,而且习惯上这是常见的 .Net 样式,而不是 if(ddl.SelectedValue != null && ddl.SelectedValue != "")
  • 啊,我现在明白了,没有考虑到SelectedValue 位。干杯。
【解决方案2】:

在 C# 6 中,您有 null 取消引用运算符,也称为安全导航运算符,因此您可以这样做...

if (!String.IsNullOrEmpty(ddl?.SelectedValue)
{
    // ddl can be null and this will not throw.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2021-03-21
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多