2013-03-27 13 views
54

ich so etwas wie dies in der Regel aus verschiedenen Gründen der gesamten Anwendung verwenden:One-Liner für string Wenn nicht null oder leer sonst

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

Wenn ich werde es ich schaffen ein Verfahren viel zu verwenden Das gibt die gewünschte Zeichenfolge zurück. Zum Beispiel:

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

und verwenden Sie es mögen:

FooTextBox.Text = NonBlankValueOf(strFoo); 

ich immer gefragt, ob es etwas war, das Teil von C# war, dass dies für mich tun würde. Etwas, das wie genannt werden könnte:

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

der zweite Parameter ist der zurückgegebene Wert, wenn String.IsNullOrEmpty(strFoo) == true

Wenn nicht Hat jemand eine bessere Ansätze haben sie verwenden?

+0

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

+1

Verwenden Sie IsNullOrWhiteSpace, während die Zeichenfolge abgeschnitten wird. –

+2

Ich würde Ihren Code nicht ändern, außer '' NonBlankValueOf' 'statisch zu machen. Verlassen Sie sich nicht auf etwas, das C# bietet - die Methode 'NonBlankValueOf' hat eine spezifische Bedeutung für Ihre App und Sie kontrollieren diese Bedeutung. Zum Beispiel, was, wenn Sie eines Tages "0" zu "1" ändern müssten? –

Antwort

110

Es gibt einen Nullkoaleszenzoperator (??), aber leere Strings werden nicht behandelt.

Wenn Sie daran interessiert sind nur waren mit null Saiten im Umgang, würden Sie es verwenden, wie

string output = somePossiblyNullString ?? "0"; 

für Ihren Bedarf speziell, es ist einfach die bedingte Operator bool expr ? true_value : false_value, die Sie einfach verwenden können, wenn/else Anweisungsblöcke das setzt oder gibt einen Wert zurück.

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

+1 für ein gutes Beispiel für die Verwendung von null Coalesc, obwohl das OP es möglicherweise benötigt, um leere Zeichenfolge in seinem Fall zu fangen. –

+0

+1 Ich wusste diesen Punkt nicht über '??' –

+0

Das Wissen von diesen beiden wird mir unendliche Mengen an verschwendeter Zeit mit if-else Aussagen sparen !! So einfach, ich denke, sie sind sogar noch einfacher zu lesen! Vielen Dank! – user2140261

7

Dies kann helfen:

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

Sie könnten die Verwendung ternary operator:

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

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

Sie können Ihre eigene Extension Methode für Typ String schreiben: -

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

Jetzt können Sie es wie bei jedem String-Typ

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

Ich dachte, es wäre: 'FooTextBox.Text = strFoo.NonBlankValueOf();' – Sinatr

+1

@Sinatr Danke, dass Sie darauf hingewiesen haben. Es kam aus Eile. – ssilas777

+0

Danke für die Funktion :) – SearchForKnowledge

1

Alte Frage, verwenden aber dachte ich, das zu helfen hinzufügen würde,

#if DOTNET35 
bool isTrulyEmpty = String.IsNullOrEmpty(s) || s.Trim().Length == 0; 
#else 
bool isTrulyEmpty = String.IsNullOrWhiteSpace(s) ; 
#endif 
Verwandte Themen