string.IsNullOrEmpty (Zeichenfolge) vs. String.IsNullOrWhiteSpace (Zeichenfolge)

Wird die string.IsNullOrEmpty(string) wenn eine Zeichenfolge überprüft wird, die als errorshaft gilt, wenn string.IsNullOrWhiteSpace(string) in .NET 4.0 und höher vorhanden ist?

Die beste Vorgehensweise ist die Auswahl des am besten geeigneten.

.NET Framework 4.0 Beta 2 verfügt über eine neue IsNullOrWhiteSpace () -Methode für Strings, die die IsNullOrEmpty () -Methode verallgemeinert, um neben Leerstrichen auch anderen Leerraum einzuschließen.

Der Begriff “Leerraum” umfasst alle Zeichen, die auf dem Bildschirm nicht sichtbar sind. Leerzeichen, Zeilenumbrüche, Tabulatoren und leere Zeichenfolgen sind beispielsweise Leerzeichen * .

Referenz: Hier

Für die performance ist IsNullOrWhiteSpace nicht ideal, aber es ist gut. Die Methodenaufrufe führen zu einer kleinen performanceseinbuße. Außerdem hat die IsWhiteSpace-Methode selbst einige Umleitungen, die entfernt werden können, wenn Sie keine Unicode-Daten verwenden. Wie immer kann eine vorzeitige Optimierung böse sein, macht aber auch Spaß.

Referenz: Hier

Überprüfen Sie den Quellcode (Referenzquelle .NET Framework 4.6.2)

IsNullorEmpty

 [Pure] public static bool IsNullOrEmpty(String value) { return (value == null || value.Length == 0); } 

IsNullOrWhiteSpace

 [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 

Die Unterschiede in der Praxis:

 string testString = ""; Console.WriteLine(string.Format("IsNullOrEmpty : {0}", string.IsNullOrEmpty(testString))); Console.WriteLine(string.Format("IsNullOrWhiteSpace : {0}", string.IsNullOrWhiteSpace(testString))); Console.ReadKey(); Result : IsNullOrEmpty : True IsNullOrWhiteSpace : True ************************************************************** string testString = " MDS "; IsNullOrEmpty : False IsNullOrWhiteSpace : False ************************************************************** string testString = " "; IsNullOrEmpty : False IsNullOrWhiteSpace : True ************************************************************** string testString = string.Empty; IsNullOrEmpty : True IsNullOrWhiteSpace : True ************************************************************** string testString = null; IsNullOrEmpty : True IsNullOrWhiteSpace : True 

Sie sind verschiedene functionen. Sie sollten sich für Ihre Situation entscheiden, was Sie brauchen.

Ich halte es nicht für eine schlechte Praktik. Die meiste Zeit ist IsNullOrEmpty() genug. Aber du hast die Wahl 🙂

Hier ist die tatsächliche Implementierung beider Methoden (dekompiliert mit dotPeek)

 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public static bool IsNullOrEmpty(string value) { if (value != null) return value.Length == 0; else return true; } ///  /// Indicates whether a specified string is null, empty, or consists only of white-space characters. ///  /// ///  /// true if the  parameter is null or , or if  consists exclusively of white-space characters. ///  /// The string to test. public static bool IsNullOrWhiteSpace(string value) { if (value == null) return true; for (int index = 0; index < value.Length; ++index) { if (!char.IsWhiteSpace(value[index])) return false; } return true; } 

Es sagt alles IsNullOrEmpty() enthält keinen weißen Abstand während IsNullOrWhiteSpace() tut!

IsNullOrEmpty() Wenn die Zeichenfolge ist:
-Null
-Leer

IsNullOrWhiteSpace() Wenn string ist:
-Null
-Leer
– Enthält nur weiße Leerzeichen

Was ist mit diesem für einen Fang alle …

 if (string.IsNullOrEmpty(x.Trim()) { } 

Dadurch werden alle Leerzeichen abgeschnitten, wenn sie vorhanden sind, wodurch die performanceseinbußen von IsWhiteSpace vermieden werden, wodurch die Zeichenfolge die Bedingung “leer” erfüllen kann, wenn sie nicht null ist.

Ich denke auch, dass dies klarer ist und es generell eine gute Übung ist, Strings trotzdem zu trimmen, besonders wenn Sie sie in eine database oder etwas ähnliches einfügen.

Überprüfen Sie dies mit IsNullOrEmpty und IsNullOrwhiteSpace

 string sTestes = "I like sweat peaches"; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); for (int i = 0; i < 5000000; i++) { for (int z = 0; z < 500; z++) { var x = string.IsNullOrEmpty(sTestes);// OR string.IsNullOrWhiteSpace } } stopWatch.Stop(); // Get the elapsed time as a TimeSpan value. TimeSpan ts = stopWatch.Elapsed; // Format and display the TimeSpan value. string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine("RunTime " + elapsedTime); Console.ReadLine(); 

Sie werden sehen, dass IsNullOrWhiteSpace viel langsamer ist: /