Verwendung von == oder Gleich für Zeichenkettenvergleich

8

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?

    
stiank81 28.12.2009, 10:10
quelle

6 Antworten

20

Ich würde nicht verwenden:

%Vor%

es sei denn, ich wusste aa konnte nicht möglicherweise null sein. Ich könnte verwenden:

%Vor%

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,

%Vor%

ist in Ordnung.

    
Marc Gravell 28.12.2009, 10:12
quelle
22

Dies ist die Implementierung des Operators:

%Vor%

Verlier keinen Schlaf darüber.

    
Hans Passant 28.12.2009 10:22
quelle
2

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 ())

    
yu_sha 28.12.2009 10:13
quelle
1

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.

    
Steve De Caux 28.12.2009 10:17
quelle
0

Überprüfen Sie Ссылка

    
Tinku 28.12.2009 10:15
quelle
-3

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.

    
Ritwik Bose 28.12.2009 10:20
quelle

Tags und Links