2013-03-27 12 views
54

Zwykle używam coś takiego z różnych powodów w całej aplikacji:One liner bo jeśli ciąg nie jest null lub pusty inny

if (String.IsNullOrEmpty(strFoo)) 
{ 
    FooTextBox.Text = "0"; 
} 
else 
{ 
    FooTextBox.Text = strFoo; 
} 

Jeśli mam zamiar go używać dużo będę utworzyć metodę która zwraca żądany ciąg znaków. Na przykład:

public string NonBlankValueOf(string strTestString) 
{ 
    if (String.IsNullOrEmpty(strTestString)) 
     return "0"; 
    else 
     return strTestString; 
} 

i używać go jak:

FooTextBox.Text = NonBlankValueOf(strFoo); 

Zawsze zastanawiałem się, czy nie było coś, co było częścią C#, który zrobi to za mnie. Coś, co można nazwać tak:

FooTextBox.Text = String.IsNullOrEmpty(strFoo,"0") 

drugi parametr jest zwracana wartość jeśli String.IsNullOrEmpty(strFoo) == true

nie Jeśli ktoś ma jakieś lepsze podejścia używają?

+0

'FooTextBox.Text = foo.IsNullOrEmpty? "0": foo; ' –

+1

Użyj IsNullOrWhiteSpace podczas przycinania łańcucha. –

+2

Nie zmieniłbym twojego kodu, z wyjątkiem sytuacji, w której stałoby się 'NonBlankValueOf'. Nie polegaj na czymś, co może dostarczyć C# - metoda "NonBlankValueOf" ma określone znaczenie dla Twojej aplikacji i kontrolujesz to znaczenie. Na przykład, co by było, gdybyś kiedyś musiał zmienić "0" na "1"? –

Odpowiedz

110

Istnieje zerowy operator koalescencji (??), ale nie obsłużyłby pustych ciągów.

Gdybyś był zainteresowany tylko w kontaktach z zerowymi strun, by użyć go jak

string output = somePossiblyNullString ?? "0"; 

do potrzeb konkretnie, nie ma po prostu operator warunkowy bool expr ? true_value : false_value że można użyć po prostu if/else blokuje oświadczenie który ustawia lub zwraca wartość.

string output = string.IsNullOrEmpty(someString) ? "0" : someString; 
+2

+1 na dobry przykład, kiedy użyć koalescencji zerowej, chociaż OP może potrzebować go do złapania pustego łańcucha w jego/jej przypadku. –

+0

+1 Nie wiedziałem, że chodzi o '??' –

+0

Znając oba te elementy, zaoszczędzisz mi nieskończonych ilości zmarnowanego czasu używając instrukcji if-else !! Tak proste, wydaje mi się, że są jeszcze łatwiejsze do odczytania! Dziękuję Ci! – user2140261

7

To może pomóc:

public string NonBlankValueOf(string strTestString) 
{ 
    return String.IsNullOrEmpty(strTestString)? "0": strTestString; 
} 
12

można użyć ternary operator:

return string.IsNullOrEmpty(strTestString) ? "0" : strTestString 

FooTextBox.Text = string.IsNullOrEmpty(strFoo) ? "0" : strFoo; 
7

Możesz napisać własną metodę Extension dla typu String: -

public static string NonBlankValueOf(this string source) 
{ 
    return (string.IsNullOrEmpty(source)) ? "0" : source; 
} 

Teraz można go używać tak jak w przypadku każdego typu string

FooTextBox.Text = strFoo.NonBlankValueOf(); 
+0

I choć byłoby to: 'FooTextBox.Text = strFoo.NonBlankValueOf();' – Sinatr

+1

@Sinatr Dzięki za wskazanie. Wyszło z pośpiechu. – ssilas777

+0

Dzięki za funkcję :) – SearchForKnowledge

1

stare pytanie, ale pomyślałem, że dodam to pomóc,

#if DOTNET35 
bool isTrulyEmpty = String.IsNullOrEmpty(s) || s.Trim().Length == 0; 
#else 
bool isTrulyEmpty = String.IsNullOrWhiteSpace(s) ; 
#endif 
Powiązane problemy