2013-06-30 5 views
8

Starając się ustawić walidacji i początkowo napotkał pewne problemy ze sprawdzaniem, czy pole tekstowe jest null, próbowałem za pomocąJaka jest różnica między („”) i (null)

private void btnGo_Click(object sender, EventArgs e) 
    { 
     string name = textLogin.Text; 
     if (name == null) 
     { 
      labelError.Visiblle = true; 
      labelError.Text = "Field Cannot be Left Blank" 
     } 
    } 

ale to nie działa , dopóki nie próbowałem tego

private void btnGo_Click(object sender, EventArgs e) 
    { 
     string name = textLogin.Text; 
     if (name == "") 
     { 
      labelError.Visiblle = true; 
      labelError.Text = "Field Cannot be Left Blank" 
     } 
    } 

Moje pytanie brzmi: chcę znać różnicę między („”) i (null) i dlaczego zerowy nie działa.

góry dzięki

+3

["string.IsNullOrEmpty()"] (http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx) jest twoim przyjacielem, ponieważ jest tak powszechne, że chcesz je traktować to samo dla celów weryfikacji. – millimoose

+4

"" oznacza pustą filiżankę. null nic nie znaczy – Dilshod

Odpowiedz

11

Taki sam jak różnica pomiędzy 0 i pustą tablicę; wszystko. Są to różne wartości. "" to pusty ciąg znaków, a to jest puste pole tekstowe, ponieważ tekst jest wszystkim. null nie jest wartością i nie jest tym, co puste pole tekstowe ma jako Text.

+1

Dzięki za wyjaśnienie –

1

null oznacza po prostu, że obiekt (w tym przypadku obiekt textLogin.Text) nie istnieje. Aby tak było, obiekt textLogin nie może istnieć. Zatem obiekt textLogin nie jest w tym przypadku wartością zerową, a zatem textLogin.Text nie może być pusty.

"" oznacza natomiast pusty ciąg znaków, co oznacza, że ​​w tekście pola tekstowego nie ma nic. tj. textLogin.Text nie zawiera żadnych znaków w nim zawartych.

3

Typ danych System.String w .NET to class, typ odniesienia. Tak więc pusty ciąg ("" lub string.Empty) jest odniesieniem do wartości o zerowej długości, podczas gdy null nie odnosi się do wartości rzeczywistej, więc każda próba dostępu do wartości, do której się odwołuje, zakończy się niepowodzeniem.

Na przykład:

string emptyString = ""; 
string nullString = null; 

Console.WriteLine(emptyString.Length); // 0 
Console.WriteLine(nullString.Length); // Exception! 

polecam użyć IsNullOrEmpty (lub IsNullOrWhiteSpace) w kodzie walidacji, aby obsługiwać oba przypadki:

if (string.IsNullOrEmpty(name)) 
{ 
    labelError.Visiblle = true; 
    labelError.Text = "Field Cannot be Left Blank" 
} 
+0

Dziękuję za wyjaśnienia –

4

"" jest pusty ciąg znaków, który vs null oznacza "nie istnieje".

W twoim przypadku najpierw porównałeś name z "nie istnieje", co było błędem, ponieważ istnieje name. Następnie porównałeś name, aby pusty ciąg był prawdziwy, ponieważ ma wartość pustego łańcucha.

+0

Dzięki za wyjaśnienie –

2

Domyślna wartość TextBox.Text jest String.Empty lub "" not null. Twój pierwszy kod nie zadziałał. null służy tylko do wskazania, że ​​obiekt niczego nie wskazuje, nie jest on przydzielany z żadną pamięcią.

0

Prosty, "" ma prawidłową wartość, tj. String.Empty, ale null nie ma żadnej wartości.

0

Różnica polega na tym, że "" środki i pusty ciąg ale null oznacza, że ​​nie istnieje

1

W perspektywie laika, null oznacza brak wartości i "" znaczy zerowej długości ciąg, który nie jest to samo. Może istnieć jakiś program, który traktuje łańcuch znaków równy i null jednakowo np. Console.WriteLine, ale nadal nie czyni z nich tego samego.

Ściśle mówiąc, wyrażenie "" == null to false według projektu. Porównanie równości typu String w środowisku .NET działa od == operator overloading, co nie jest równoznaczne z null jako równym "".