C#字符串 - 为什么null给我一个不同的结果而不是“”?

时间:2012-04-04 04:40:36

标签: c# string null

我设置了2个表单。在第一种形式中,我有以下代码。

frm_BL addBranch = new frm_BL();

do
{
    addBranch.ShowDialog();
    if (addBranch.txtAmount.Text == "")
    {
        break;
    }

} while (true);

主要形式。而这只是第二种形式。

private void btnAccept_Click(object sender, EventArgs e)
{
    this.Close();
}

但是我发现如果我将主窗体的代码更改为:

 if (addBranch.txtAmount.Text == null) //changed to null

第二种形式不断涌现。但如果它停留在

if (addBranch.txtAmount.Text == "") 

关闭表格。有人可以解释为什么会这样吗?

6 个答案:

答案 0 :(得分:5)

null和空字符串是两回事,如果要处理这两种情况,可以使用String.IsNullOrEmpty

null表示对您所拥有的字符串的引用不存在(您指向什么)

空字符串表示您对不包含任何内容的字符串的引用(例如,指向空字符数组的指针)。

答案 1 :(得分:5)

最好的方法是:

if (String.IsNullOrEmpty(addBranch.txtAmount.Text))

txtAmount.Text属性是包含文本框内容的string。如果文本框为空,那么它是一个零长度的字符串。

检查与null是否相等是说“如果文本框没有字符串...”,这将始终为false。要检查的正确条件是“如果文本框的字符串为空......”。

使用IsNullOrEmpty方法检查两种情况。在这种情况下,字符串永远不应该为null,但检查它不会有害。

请注意,""是一个空字符串(相当于String.Empty),而null表示该字符串不存在。

答案 2 :(得分:2)

null String与空String不同。请改用String.Empty()

答案 3 :(得分:0)

我会查看更多信息的定义:

  

null关键字是一个表示空引用的文字,一个不引用任何对象的引用。 null是引用类型变量的默认值。普通值类型不能为空。但是,C#2.0引入了可以为空的值类型。

http://msdn.microsoft.com/en-us/library/edakx9da.aspx

  

此字段的值(String.Empty)是零长度字符串“”。在应用程序代码中,此字段最常用于分配,以将字符串变量初始化为空字符串。

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx

我们看到的另一件事是“要测试字符串的值是Nothing还是String.Empty,请使用IsNullOrEmpty方法。”

因此,当某些内容为null时,它表示对任何内容的引用(最常见的是引用0),而当字符串包含空值时,这意味着该字符串为空但它包含对有效内存的引用。

答案 4 :(得分:0)

无论你编写代码(在c#和每个有效(非空)TextBox中),txtAmount.Text都不会返回null。

TextBox.Text返回一个字符串,该字符串为空字符串或非空字符串。

答案 5 :(得分:0)

除了已经正确的答案之外,我还会在检查中添加Trim(),因为在大多数情况下,只有空格的字符串不是特别适用于TextBox输入的字符串。

if (string.IsNullOrEmpty(addBranch.txtAmount.Text.Trim()))