文本框的文本属性甚至可能为空吗?

本文关键字:文本 属性 | 更新日期: 2023-09-27 18:31:44

我遇到了这段代码:

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

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

更新

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

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

。是比这更好的测试:

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

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

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)

一个?

文本框的文本属性甚至可能为空吗?

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

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

或者,根据您的要求:

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

是的,不需要.ToString()

我在该代码中看到的问题是.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行上引发异常