2009-01-11 18 views
11

Değeri boş veya boş değil "", ancak String.Empty değil, denetler C# bir anahtar olması mümkün mü? Ben bunu biliyorum:C# ile geçiş String.IsNullOrEmpty

switch (text) 
{ 
    case null: 
    case "": 
     break; 
} 

daha iyi bir şey var mı, ben büyük bir listesine sahip istemiyorum çünkü tabloların IF?

I'mm değiştirmeye çalışırken:

if (String.IsNullOrEmpty(text)) 
    blah; 
else if (text = "hi") 
    blah 
+0

Ben String.Empty ve "" arasında bir fark olduğunu bilmiyordum. Fark ne? – recursive

+0

Hiç yok. İçerik düzeyinde aynı. Referans farklıdır. String.Empty, her zaman aynı örneği verirken "" farklı bir örnek döndürür. –

+2

Eminim iki "" aslında aynı nesne olacaktır. Çünkü .net dizeleri kesiyor ama pozitif değil. object.ReferenceEquals, aynı olduklarını gösterir. – JoshBerke

cevap

28

aşağıdaki gibi bir şey önermek nasıl:

switch(text ?? String.Empty) 
{ 
    case "": 
     break; 
    case "hi": 
     break; 
} 

mı neyi Arıyorsunuz? documentationString.Empty ait itibaren

5

yaklaşık

if (string.isNullOrEmpty(text)) 
{ 
    //blah 
} 
else 
{ 
switch (text) 
{ 
    case "hi": 
} 

}

+0

Soru, if-else ifadelerinden kaçınmaktı. –

+1

Düzenleme geçmişine bakarsanız, orijinal soru başka bir şey içermediyse ;-) – JoshBerke

+0

Ayrıca, bu durumun yalnızca bir tane varsa, başka bir şey olup olmadığıyla ilgili bir endişe varsa, bu durumun stilini engeller. – JoshBerke

3

:

Bu alanın değeri sıfır uzunluklu dize, "" dir.

Ben "" ve String.Empty arasında hiçbir fark olduğunu ifade etmek için bu yorumlamak. Neden onları birbirinden ayırmaya çalışıyorsun?

+0

"" ile String arasında bir fark olduğundan emin değildim. Kültüre (unicode ascii vb.) Uygun olarak. – maxfridbe

21

Örneğinizdeki sorun ne? switch?

switch (text) 
{ 
    case null: 
    case "": 
     foo(); 
     break; 
    case "hi": 
     bar(); 
     break; 
} 

O çalışıyor (ve beni şaşırttı nedense - Ben şikayet veya null durumda kazasında düşündüm) ve açık.

Bu konuyla ilgili olarak neden String.Empty hakkında endişeleniyorsunuz? Burada bir şey kaçırıyorum.

+0

Bunu denemek için bile uğraşmadım bile bu durumda boş işler hmmm ... – JoshBerke

3

Boş bir dize, "String" değerine eşittir. 'un'un bir "case deyimine" "put" koyup "String.Empty" yazmaması, "Empty" öğesinin "String" ve "" öğelerinin aslında bir alan olduğu anlamına gelir.

Durumlarda sabit değerlere izin verilir, String.Empty bir alandır ve çalışma zamanında değiştirilebilir. (Bu durumda, aynı kalır, ancak her sınıfın statik alanlarının tümü sabit değerlerdir.)

'if' durumunda, bu koşul çalışma zamanında değerlendirilir ve gerektirir. sabit değer.

Umarım bu nedenini açıklar.

3

Fark ettiğim bir şey, 'u/else ile birleştirebilir ve ifadeleri değiştirebilir! Önkoşulları kontrol etmek gerektiğinde çok kullanışlıdır.

if (string.IsNullOrEmpty(text)) 
{ 
    //blah 
} 
else switch (text) 
{ 
    case "hi": 
     Console.WriteLine("How about a nice game of chess?"); 
     break; 
    default: 
     break; 
} 
+2

Biri ilgili bir yayında SO üzerinde işaret etti, bu gerçekten bu ifadeleri bir araya getirmiyor, ama başka bir deyim sadece kaşlı ayraçlar olmadan, yani Anahtar, yürütülen tek ifadedir. Bu sözdizimsel olarak Josh'un cevabı ile aynı. Bence güzel gözüküyor. –

0
string StrMode; 
if (!string.IsNullOrEmpty(StrMode)) 
{ 
    switch (StrMode.Trim()) 
    { 
     case "Souse": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     case "Company Agent": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     default: 
      return; 
    } 
}