Wird die Verwendung string.IsNullOrEmpty(string)
beim Überprüfen einer Zeichenfolge string.IsNullOrWhiteSpace(string)
in .NET 4.0 und höher als schlechte Vorgehensweise angesehen ?
Die beste Vorgehensweise ist die Auswahl der am besten geeigneten.
.Net Framework 4.0 Beta 2 verfügt über eine neue IsNullOrWhiteSpace () -Methode für Zeichenfolgen, die die IsNullOrEmpty () -Methode so verallgemeinert, dass neben leeren Zeichenfolgen auch andere Leerzeichen enthalten sind.
Der Begriff „Leerraum“ umfasst alle Zeichen, die auf dem Bildschirm nicht sichtbar sind. Beispielsweise sind Leerzeichen, Zeilenumbruch, Tabulator und leere Zeichenfolge Leerzeichen * .
Referenz: Hier
Für die Leistung ist IsNullOrWhiteSpace nicht ideal, aber gut. Die Methodenaufrufe führen zu einer geringen Leistungsminderung. Darüber hinaus verfügt die IsWhiteSpace-Methode selbst über einige Indirektionen, die entfernt werden können, wenn Sie keine Unicode-Daten verwenden. Wie immer mag vorzeitige Optimierung böse sein, aber es macht auch Spaß.
Referenz: Hier
Überprüfen Sie den Quellcode (Referenzquelle .NET Framework 4.6.2)
[Pure]
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
[Pure]
public static bool IsNullOrWhiteSpace(String value) {
if (value == null) return true;
for(int i = 0; i < value.Length; i++) {
if(!Char.IsWhiteSpace(value[i])) return false;
}
return true;
}
Beispiele
string nullString = null;
string emptyString = "";
string whitespaceString = " ";
string nonEmptyString = "abc123";
bool result;
result = String.IsNullOrEmpty(nullString); // true
result = String.IsNullOrEmpty(emptyString); // true
result = String.IsNullOrEmpty(whitespaceString); // false
result = String.IsNullOrEmpty(nonEmptyString); // false
result = String.IsNullOrWhiteSpace(nullString); // true
result = String.IsNullOrWhiteSpace(emptyString); // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString); // false
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
um eine neue Zeichenfolgenzuweisung und zwei separate Überprüfungen. Höchstwahrscheinlich erfolgt dies in IsNullOrWhitespace über einen einzigen Durchgang ohne Zuweisungen, indem überprüft wird, ob jedes Zeichen in der Zeichenfolge das Leerzeichen ist, wodurch eine überlegene Leistung erzielt wird. Was verwirrt dich eigentlich?IsNullOrWhitespace()
eine leere Zeichenfolge passen würde. Entspricht im WesentlichenIsNullOrEmpty()
einer Teilmenge vonIsNullOrWhitespace()
.Die Unterschiede in der Praxis:
quelle
Sie sind verschiedene Funktionen. Sie sollten für Ihre Situation entscheiden, was Sie brauchen.
Ich halte es nicht für eine schlechte Praxis, einen von ihnen zu verwenden. Die meiste Zeit
IsNullOrEmpty()
ist genug. Aber du hast die Wahl :)quelle
Contains
. Wenn Sie sicherstellen möchten , dass Benutzernamen nicht von Räumen bestehen nur -IsNullOrWhiteSpace
ist in Ordnung.IsNullOrEmpty
stellt nur sicher, dass der Benutzername irgendwie eingegeben wurde.Hier ist die tatsächliche Implementierung beider Methoden (mit dotPeek dekompiliert)
quelle
IsNullOrWhiteSpace
gilt also auch fürstring.Empty
! Das ist ein Bonus :)Es heißt, dass alles
IsNullOrEmpty()
keinen weißen Abstand enthält, während dies derIsNullOrWhiteSpace()
Fall ist!IsNullOrEmpty()
Wenn die Zeichenfolge lautet:-Null
-Empty
IsNullOrWhiteSpace()
Wenn die Zeichenfolge lautet:-Null
-Empty-
Enthält nur Leerzeichen
quelle
Überprüfen Sie dies mit IsNullOrEmpty und IsNullOrwhiteSpace
Sie werden sehen, dass IsNullOrWhiteSpace viel langsamer ist: /
quelle
string.IsNullOrEmpty (str) - Wenn Sie überprüfen möchten, ob der Zeichenfolgenwert angegeben wurde
string.IsNullOrWhiteSpace (str) - im Grunde ist dies bereits eine Art Implementierung der Geschäftslogik (dh warum "" schlecht ist, aber so etwas wie "~~" ist gut).
Mein Rat - mischen Sie keine Geschäftslogik mit technischen Prüfungen. So ist beispielsweise string.IsNullOrEmpty am besten zu Beginn von Methoden zu verwenden, um ihre Eingabeparameter zu überprüfen.
quelle
Was ist damit für einen Fang alle ...
Dadurch werden alle Leerzeichen gekürzt, wenn sie vorhanden sind, wodurch die Leistungseinbußen von IsWhiteSpace vermieden werden. Dadurch kann die Zeichenfolge die Bedingung "leer" erfüllen, wenn sie nicht null ist.
Ich denke auch, dass dies klarer ist und es im Allgemeinen eine gute Praxis ist, Zeichenfolgen trotzdem zu kürzen, insbesondere wenn Sie sie in eine Datenbank oder etwas anderes einfügen.
quelle
Im .Net-Standard 2.0:
quelle