Wie kann ich die Zeile unter Groß- und Kleinschreibung nicht berücksichtigen?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Ich habe heute früher einige Ratschläge erhalten, die mir vorschlugen, Folgendes zu verwenden:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
Das Problem ist, dass ich dies nicht zum Laufen bringen kann. Ich habe die folgende Zeile ausprobiert. Diese wird kompiliert, gibt jedoch die falschen Ergebnisse zurück. Sie gibt registrierte Benutzer als nicht registrierte und nicht registrierte Benutzer als registrierte Benutzer zurück.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
Kann jemand auf das Problem hinweisen?
drUser["Enrolled"]
sein? Es sieht aus wie ein boolescher Wert, gibt aberFindIndex()
den Index zurück. Wenn der Index dieses Benutzers 0 ist, wird 0 zurückgegeben, was möglicherweise falsch ist. Wann ist in Wirklichkeit wahr? DieExists()
Methode kann in diesem Fall besser sein.Antworten:
Dies ist nicht die beste Vorgehensweise in .NET Framework (4 & +), um die Gleichheit zu überprüfen
Verwenden Sie stattdessen Folgendes
MSDN empfiehlt:
quelle
string.Compare
nicht verwendenString.Compare
.string
ist eine bessere Übung alsString
da es sich um ein Sprachschlüsselwort handelt. Zum einenString
könnte es etwas anderes sein alsSystem.String
, währendstring
es nicht sein kann. Außerdemstring
ist mehr oder weniger garantiert, dass es in C # existiert, wohingegenString
es technisch eher Teil von .NET als von C # ist.Sie sollten die statische
String.Compare
Funktion wie folgt verwendenquelle
String.Equals
anstelle von verwendenString.Compare
. Es ist nicht nötig zu berechnen, welches größer ist, nur dass sie nicht gleich sind.IEquatable
undIComparable
tun Sie NICHT dasselbe, und Sie können Klassen haben, die eine implementieren, in denen es jedoch KEINEN Sinn macht, die andere zu implementieren. Sie können beispielsweise Sensorabtastungen nach Zeit sortieren, ohne dass sie gleich sind (IComparable). Sie können angeben, ob die Dinge gleich sind (IEquatable), aber es macht keinen Sinn, sie zu bestellen (z. B. Computer-Seriennummern).Bitte verwenden Sie dies zum Vergleich:
quelle
Andere Antworten sind hier völlig gültig, aber irgendwie dauert es einige Zeit, sie zu tippen
StringComparison.OrdinalIgnoreCase
und auch zu verwendenString.Compare
.Ich habe eine einfache String-Erweiterungsmethode codiert, bei der Sie angeben können, ob beim Vergleich zwischen Groß- und Kleinschreibung unterschieden wird oder ob die Groß- und Kleinschreibung nicht berücksichtigt wird. Fügen Sie hier das gesamte Code-Snippet hinzu:
Danach verkürzt sich der gesamte Vergleich um ungefähr 10 Zeichen - vergleiche:
Vor der Verwendung der String-Erweiterung:
Nach Verwendung der String-Erweiterung:
quelle
Sie können (obwohl kontrovers) erweitern
System.String
, um eine Methode zur Erweiterung des Vergleichs ohne Berücksichtigung der Groß- und Kleinschreibung bereitzustellen:und als solche verwenden:
Mit C # können Sie Erweiterungsmethoden erstellen, die in Ihrem Projekt als Syntaxzucker dienen können. Dies ist sehr nützlich, würde ich sagen.
Es ist nicht die Antwort und ich weiß, dass diese Frage alt und gelöst ist. Ich wollte nur diese Teile hinzufügen.
quelle
Ich denke, Sie finden weitere Informationen in diesem Link:
http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/
Verwenden Sie die statische Methode Compare für die String-Klasse, um die beiden Strings zu vergleichen. Ob der Vergleich nicht zwischen Groß- und Kleinschreibung unterscheidet, wird durch den dritten Parameter einer seiner Überlastungen bestimmt. Beispielsweise:
Der caseSensitiveResult-Wert ist -1 (zeigt an, dass lowerCase "kleiner als" UpperCase ist) und caseInsensitiveResult ist Null (zeigt an, dass lowerCase "gleich" UpperCase ist).
quelle
Wie wäre es
StringComparison.CurrentCultureIgnoreCase
stattdessen zu verwenden?quelle
Ich möchte eine Erweiterungsmethode für EqualsIgnoreCase schreiben
quelle
Sie können immer folgende Funktionen verwenden: .ToLower (); .ToUpper ();
konvertiere deine Strings und vergleiche sie dann ...
Viel Glück
quelle