关于c#:String.IsNullOrWhiteSpace()和string.IsNullOrEmpty()中的NullReferenceException

NullReferenceException in string.IsNullOrWhiteSpace() and string.IsNullOrEmpty()

我正在检查列中可能为空/空的单元格值,因此需要避免使用NullReferenceException

我该怎么做呢,因为即使有了IsNullOrWhiteSpace()IsNullOrEmpty(),我也不知怎么地得到了那个例外。

以下是我使用的部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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。还有什么,或者我到底做错了什么,我该怎么做才对呢?


很多地方的代码都会抛出这个异常。

1
2
3
4
dataGridView1.Rows[0]  //here
             .Cells[0] //here
             .Value    //and here
             .ToString()

我相信你不需要只需输入:

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

在你的if声明中,这样做:

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


许多人不知道如何诊断NullReferenceException。考虑以下内容:

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

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

1
2
3
4
5
6
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


我认为在dataGridView1.Rows[0].Cells[8].Value.ToString()中,如果值为空,您将得到一个nullreferenceexception。因此,您应该检查dataGridView1.Rows[0].Cells[8].Value != null,然后可以将其转换为字符串


您可以添加一行额外的代码来检查和处理空的大小写。

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

如果值为空,则不会计算ToString(),并且程序不能引发NullReferenceException。