1

我遇到了这段代码:

if (txtUPC.Text.ToString() != null)

...并且想知道这个测试是否有效 - text 属性是否可能为空?txtUPC 不是动态创建的控件。当然,它可以是空的,或者只包含空格,但为空?如果是这样,我想知道如何。再说一次,在 text 属性上调用 ToString() 似乎也像穿着带腰带的吊带。

更新

所以在我看来,对我来说(记住:.NET 1.1,Windows CE/Compact Framework),这是:

if (txtUPC.Text.Trim() != string.Empty)

...比这更好的测试:

if (txtUPC.Text.ToString() != null) 

然而,在更专注地凝视这段代码时,无论如何,外部或内部的手套似乎都是多余的/不必要的。请注意该方法包括的两个 shibbeleth-pronunciation-checkers:

if (txtUPC.Text.ToString() != null) 
{
    if (txtUPC.Text.Length > 0)
    {
                    . . .
    else
    {
        MessageBox.Show("Please enter a value in the item field");
        txtUPC.Focus();
    }
}
else
{
    MessageBox.Show("Please enter a value in the item field");
    txtUPC.Focus();
}
. . .

似乎一个看门人/拳手就足够了——要么这样检查:

if (txtUPC.Text.Trim() != string.Empty)

...或者这样:

if (txtUPC.Text.Trim().Length > 0)

一种?

4

2 回答 2

9

我认为它永远不会为空(也许 winforms/asp.net/wpf 文本框之间存在差异,但我不这么认为)。虽然更好的检查是:

if (String.IsNullOrEmpty(txtUPC.Text) { ... }

或者,根据您的要求:

if (String.IsNullOrWhiteSpace(txtUPC.Text) { ... }

是的,.ToString()不需要。

于 2013-09-16T23:47:19.117 回答
4

我在该代码中看到的问题是.ToString()将对象作为字符串返回。如果在这种情况下,对象是一个字符串,它只返回原始字符串(原样)

问题是如果.Text为空,那么方法调用.ToString()会抛出一个NullReferenceException.

您可以在此处查看有关.ToString覆盖的更多信息

有关示例,请参见此代码:

String str1 = "";
String str2 = null;

Console.WriteLine("Original str1: {0}", str1);
Console.WriteLine("Original str2: {0}", str2);

Console.WriteLine("ToString str1: {0}", str1.ToString());
Console.WriteLine("ToString str2: {0}", str2.ToString());

会抛出异常就ToString str2

于 2013-09-16T23:50:33.433 回答