2012-04-04 42 views
2

我有2個表單設置。在第一種形式中,我有以下代碼。C#字符串 - 爲什麼null給我一個與「」不同的結果?

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 == "") 

它關閉窗體。有人可以解釋爲什麼嗎?

回答

5

做到這一點,最好的辦法是:

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

txtAmount.Text屬性是一個包含文本框的內容string。如果文本框是空的,那麼它是一個零長度的字符串。

檢查與null的等同性是否說「如果文本框沒有字符串...」,它將始終爲假。要檢查的正確條件是「如果文本框的字符串是空的......」。

使用IsNullOrEmpty方法檢查兩個條件。在這種情況下,字符串不應該爲空,但它不會影響檢查。

請注意,""是一個空字符串(相當於String.Empty),而null表示該字符串不存在。

+0

哇,這是一個很好的答案。謝謝 – Pztar 2012-04-04 04:56:51

2

A nullString不同於空的String。改爲使用String.Empty()

5

空和空字符串是兩回事,如果你要處理這兩種情況可以使用String.IsNullOrEmpty代替

空意味着引用你不存在(你點什麼)

字符串

空字符串表示您有一個對包含任何內容的字符串的引用(例如指向空字符數組的指針)。

0

我想看看定義更多信息:

空關鍵字是字面表示空引用,一個不指向任何對象。 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

一個我們看到更多的東西存在,「要測試一個字符串的值是否不存在或是的String.Empty,使用IsNullOrEmpty方法。」

所以當有東西是null它表示一個沒有任何引用(通常它引用0),而當一個字符串包含一個空值,這意味着該字符串是空的,但它保存有效內存的引用。無論你寫的代碼(在C#和每一個有效的(非空)文本框)

0

txtAmount.Text絕不會返回一個空。

TextBox.Text返回字符串其是空字符串或非空串。

0

除了已經正確答案我也因爲在大多數的情況下,唯一的字符串用空格不是那種特別接受一個TextBox輸入添加TRIM()來檢查。

if (string.IsNullOrEmpty(addBranch.txtAmount.Text.Trim())) 
相關問題