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

Pzt*_*tar 2 c# string null

我有2个表格设置.在第一种形式中,我有以下代码.

frm_BL addBranch = new frm_BL();

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

} while (true);
Run Code Online (Sandbox Code Playgroud)

在主要形式.而这只是第二种形式.

private void btnAccept_Click(object sender, EventArgs e)
{
    this.Close();
}
Run Code Online (Sandbox Code Playgroud)

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

 if (addBranch.txtAmount.Text == null) //changed to null
Run Code Online (Sandbox Code Playgroud)

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

if (addBranch.txtAmount.Text == "") 
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*mos 5

null和空字符串是两个不同的东西,如果你想处理这两种情况你可以使用String.IsNullOrEmpty代替

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

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


And*_*per 5

最好的方法是:

if (String.IsNullOrEmpty(addBranch.txtAmount.Text))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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