In einigen Sprachen (z. B. C ++) können Sie keine Operatoren wie == für Zeichenfolgenvergleiche verwenden, da dies die Adresse des Zeichenfolgenobjekts und nicht die Zeichenfolge selbst vergleicht. In C # können Sie jedoch == verwenden, um Strings zu vergleichen, und es wird tatsächlich den Inhalt der Strings vergleichen. Aber es gibt auch String-Funktionen, um solche Vergleiche zu handhaben, also ist meine Frage; sollten Sie?
Gegeben zwei Strings:
%Vor%Sollten Sie sie so vergleichen:
%Vor%Oder verwenden Sie die Equal Funktion wie folgt:
%Vor%Gibt es überhaupt einen technischen Unterschied? Oder vernünftige Argumente für Best Practice?
Ich würde nicht verwenden:
%Vor% es sei denn, ich wusste aa
konnte nicht möglicherweise null sein. Ich könnte verwenden:
Aber ich würde hauptsächlich verwenden, dass ich einen der spezifischen StringComparison
Modi verwenden wollte (invariant, ordinal, case-insensitive, usw.). Obwohl ich vielleicht auch die StringComparer
Implementierungen benutze, da sie etwas einfacher zu abstrahieren sind (zB um in ein Dictionary<string, Foo>
für ein case-insensitive Ordinalwörterbuch zu übergeben). Für allgemeine Zwecke,
ist in Ordnung.
Dies ist die Implementierung des Operators:
%Vor%Verlier keinen Schlaf darüber.
Es gibt keinen technischen Unterschied (außer aa ist null). Benutze, was dir besser aussieht. Meiner Meinung nach macht die Verwendung von Operatorüberladungen den Code klarer.
Verwenden Sie Funktionen, wenn Sie zusätzliche Argumente benötigen (oder in Zukunft benötigen) (wie in CompareTo ())
Im Best Practice-Verfahren würde ich immer eine Equals () - Funktion für den String-Vergleich verwenden. Dadurch wird deutlich, wenn jemand anderen Ihren Code liest, für den Sie die Strings spezifisch vergleichen möchten.
Im Allgemeinen gilt == Zeigergleichheit, während .equals prüft, ob die Attribute gleich sind. Also wenn du sowas wie
gemacht hast %Vor%dann sollte c false zurückgeben und d sollte wahr sein.
Tags und Links string .net c# string-comparison