C# TextBox的text属性是否可能为null?

C# TextBox的text属性是否可能为null?,c#,textbox,null,C#,Textbox,Null,我遇到了以下代码: if (txtUPC.Text.ToString() != null) …不知道这个测试是否有效-text属性是否可能为null?TxTPC不是动态创建的控件。当然,它可以是空的,也可以只包含空格,但是否为空?如果是的话,我想知道怎么做。再次,对text属性调用ToString()看起来也像是穿着带腰带的吊带裤 使现代化 所以在我看来,对我来说(记住:.NET 1.1,Windows CE/Compact Framework),这是: …是比这更好的测试: if (txtU

我遇到了以下代码:

if (txtUPC.Text.ToString() != null)
…不知道这个测试是否有效-text属性是否可能为null?TxTPC不是动态创建的控件。当然,它可以是空的,也可以只包含空格,但是否为空?如果是的话,我想知道怎么做。再次,对text属性调用ToString()看起来也像是穿着带腰带的吊带裤

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

…是比这更好的测试:

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)
…或者这样:

if (txtUPC.Text.Trim() != string.Empty)
if (txtUPC.Text.Trim().Length > 0)

a?

我不认为它可能是空的(也许winforms/asp.net/wpf文本框之间有区别,但我不这么认为)。尽管更好的检查方法是:

if (String.IsNullOrEmpty(txtUPC.Text) { ... }
或者,根据您的要求:

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

是的,
.ToString()
是不需要的。

我不认为它可能是空的(winforms/asp.net/wpf文本框之间可能有区别,但我不这么认为)。尽管更好的检查方法是:

if (String.IsNullOrEmpty(txtUPC.Text) { ... }
或者,根据您的要求:

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

是的,不需要
.ToString()

我看到该代码的问题是
.ToString()
将对象作为字符串返回。在本例中,如果对象是字符串,则只返回原始字符串(与原样完全相同)

问题是,如果
.Text
为null,则
.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
行上抛出异常

我看到该代码的问题是
.ToString()
将对象作为字符串返回。在本例中,如果对象是字符串,则只返回原始字符串(与原样完全相同)

问题是,如果
.Text
为null,则
.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
行上引发异常,如果
Text
为空,
Text.ToString()
仍将引发异常。所以,我想说不是,如果
Text
为null,
Text.ToString()
无论如何都会抛出异常。所以,我不这么说。我们总是使用第二个(<代码> iNulLuleWeleStase),但这仅仅是因为我们总是认为“等价于没有被输入的东西”。我通常使用iNulLuleWaleStEy,但是它不在这个环境(WinOWSCE,CF,.NET 1.1)中可用。它总是不支持我在任何给定的类中需要的一种方法。@ Jason:所以你知道我的痛苦。我们总是使用第二个(<代码> iNulLuleWeleStase),但这仅仅是因为我们总是认为“等同于没有被输入的东西”。我通常也使用ISNulLuleWaleStEy,但在这个环境中是不可用的。(WindowsCE,CF.NET 1.1)@克莱·香农:噢,我记得紧凑框架的时代……它总是不支持任何给定类中我需要的一个方法。@JasonDown:所以你知道我的痛苦。但是.Text怎么可能为null?如果文本框存在,文本将永远是某种东西,不是吗?要么是空字符串,要么是字符串值……对吗?但是.Text怎么可能为null?如果文本框存在,文本将永远是一些东西,不是吗?要么是一个空字符串,要么是一些字符串值…对吗?