【问题标题】:NullReferenceException in string.IsNullOrWhiteSpace() and string.IsNullOrEmpty()string.IsNullOrWhiteSpace() 和 string.IsNullOrEmpty() 中的 NullReferenceException
【发布时间】:2013-11-11 15:27:33
【问题描述】:

我正在检查可能为空/空的列的单元格值,因此我需要一些东西来避免NullReferenceException

我该怎么做,因为即使使用 IsNullOrWhiteSpace()IsNullOrEmpty() 我还是会以某种方式得到该异常。

这是我正在使用的部分代码:

s = "Total = " + dataGridView1.Rows[0].Cells.Count +
    "0 = " + dataGridView1.Rows[0].Cells[0].Value.ToString() +
    "/n  1 = " + dataGridView1.Rows[0].Cells[1].Value.ToString() +
    "/n  2= " + dataGridView1.Rows[0].Cells[2].Value.ToString() +
    "/n  3 = " + dataGridView1.Rows[0].Cells[3].Value.ToString() +
    "/n  4= " + dataGridView1.Rows[0].Cells[4].Value.ToString() +
    "/n  5 = " + dataGridView1.Rows[0].Cells[5].Value.ToString() +
    "/n  6= " + dataGridView1.Rows[0].Cells[6].Value.ToString() +
    "/n  7 = " + dataGridView1.Rows[0].Cells[7].Value.ToString();

    if (string.IsNullOrEmpty(dataGridView1.Rows[0].Cells[8].Value.ToString()))
    {

    }
    else
    {
        s += "/n  8 = " + dataGridView1.Rows[0].Cells[8].Value.ToString();
    }

我试过那些方法我试过把它==null,我试过!=null。还有什么或者我到底做错了什么,我该如何做对?

【问题讨论】:

  • 我通常在这种情况下使用asstring.IsNullOrEmpty(dataGridView1.Rows[0].Cells[8].Value as string)。如果Value 不是字符串或为空,as 将返回null。当然也假设这个特殊的异常是因为Value 是空的。但是请注意,我的示例在语义上与尝试在某事上调用 ToString 不同,因为这适用于任何类型。
  • NullReferenceException 的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。
  • .ToString() never 返回 null (在 .NET Framework 中 - 您当然可以编写一个这样做的),因此您使用 .IsNullOrEmpty 进行的测试对空值。事实上,您可能会通过在 null 的值上调用 .ToString() 获得异常。

标签: c# string nullreferenceexception isnullorempty


【解决方案1】:

您可以添加额外的代码行来检查和处理 null 情况。

var value = dataGridView1.Rows[0].Cells[0].Value;
string s = (value == null ? string.Empty : value.ToString());

如果 value 为 null,则不会计算 ToString(),并且程序不能抛出 NullReferenceException。

【讨论】:

    【解决方案2】:

    我认为在 dataGridView1.Rows[0].Cells[8].Value.ToString() 中,如果 Value 为 null,您将收到 NullReferenceException。所以你应该检查dataGridView1.Rows[0].Cells[8].Value != null然后你可以把它转换成一个字符串

    【讨论】:

      【解决方案3】:

      您编写的代码有很多地方可能会引发该异常 ..

      dataGridView1.Rows[0]  //here
                   .Cells[0] //here
                   .Value    //and here
                   .ToString() 
      

      我相信您不需要ToString(),只需输入:

      "... "+ dataGridView1.Rows[0].Cells[0].Value
      

      在您的ifstatement 中这样做:

      if (string.IsNullOrEmpty(dataGridView1.Rows[0].Cells[8].Value as string))
      

      【讨论】:

        【解决方案4】:

        很多人不明白如何诊断NullReferenceException。考虑以下几点:

        dataGridView1.Rows[0].Cells[3].Value.ToString()
        

        其中许多部分可能是null。和

        是一样的
        var a = dataGridView1.Rows;
        var b = a[0];
        var c = b.Cells;
        var d = c[3];
        var e = d.Value;
        var f = e.ToString();
        

        如果anull,那么a[0] 将抛出NullReferenceException。如果bnull,那么b.Cells 会抛出一个NullReferenceException 等等。

        在您的特定情况下,您只需弄清楚其中哪个是null。最简单的方法是使用调试器。在引发异常的行之前设置断点。然后将鼠标悬停在表达式的各个部分上以查看哪些为空,或使用“监视”窗口输入表达式的各个部分。

        当您找到null 时,您可以停止寻找您的NullReferenceException

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-23
          • 1970-01-01
          • 2011-01-25
          • 1970-01-01
          • 2012-03-25
          • 2020-11-03
          • 1970-01-01
          相关资源
          最近更新 更多