Um zu überprüfen, ob eine Zeichenfolge leer ist, verwende ich
%Vor%Alle obigen Anweisungen erzeugen die gleiche Ausgabe. Was ist die optimale Methode, die ich verwenden sollte?
%Vor%Auch hier machen beide Aussagen dasselbe. Was ist die beste Methode zu verwenden?
Ich habe versucht, zu debuggen und die Leistung einer C # -Anweisung zu vergleichen?
Zunächst geben die 4 Statements nicht an allen Eingängen die gleiche Ausgabe aus. Versuche Null und die ersten 3 werden eine Ausnahme auslösen. Und versuchen Sie mit Leerzeichen, die letzte wird Ihnen ein fehlerhaftes Ergebnis geben. Du musst also wirklich darüber nachdenken, was du willst. Der beste Weg zu gehen sind normalerweise die:
%Vor%Nur wenn Sie dies ein paar Millionen Mal tun, sollten Sie einen Blick darauf werfen, wie Sie Ihren Code weiter optimieren können.
Hier ein paar Testergebnisse, aber das kann bei jeder .net-Version anders sein:
Testergebnisse für 100 Millionen Iterationen:
%Vor% Ich würde für String.IsNullOrWhiteSpace
oder String.IsNullOrEmpty
gehen.
Length
, Count
und Any
können fehlschlagen, wenn test
ist null
mit object null reference
]
Wenn Sie nicht sicher sind, dass Ihre Zeichenfolge nicht null ist, müssen Sie überprüfen, ob die Zeichenfolge null ist, bevor Sie die Länge testen oder eine Methode für die Variable zählen oder aufrufen.
In diesem Szenario ist .Length
nicht identisch mit String.IsNullOrWhiteSpace
Soweit mir bekannt ist:
.Any()
: hat die Absicht zu prüfen, ob irgendwelche Objekte in einem Array existieren. Und da string ein Array von char ist, funktioniert das. Und ist ein Teil von Linq
.Length
: hat die Absicht, Ihnen die Länge des char-Arrays zu geben.
Also, ja das gleiche Verhalten, aber etwas andere Absichten.
Übrigens sollten Sie String.IsNullOrWhitespace
wirklich verwenden, um Strings als leer zu prüfen. Zumindest ist das meine Präferenz, so dass Sie, wenn Sie eine Zeichenfolge aus vielen Leerzeichen haben, nicht zuerst trimmen müssen.
Für eine Variable sind die Ergebnisse:
String.IsNullOrEmpty(test)
& lt; String.IsNullOrWhiteSpace(test)
& lt; & lt; test.Length==0
& lt; & lt; & lt; !(test.Any())
≡ test.Count() == 0
test.ToString(CultureInfo.InvariantCulture)
& lt; Convert.ToString(test)
(10-fache Bestellung) Ich habe das folgende Code-Snippet verwendet, um das obige zu testen.
%Vor% Infact String.IsNullOrEmpty(test)
ist das Beste, was jemand in den Kommentaren oben gesagt hat ...:)
Tags und Links c# visual-studio-2010 .net-4.0