Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tip
Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik már legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha még csak most ismerkedik a programozással, először az Első lépések oktatóanyagokkal kezdje.
Más nyelvről jön? A C# == a sztringeken az értékeket hasonlítja össze, nem a hivatkozásokat, csakúgy, mint a Java equals vagy a JavaScript ===. A fő különbség az, hogy a C# lehetővé teszi az ordinális (bináris) és a kultúratudatos összehasonlítás közötti választást egy StringComparison értéken keresztül.
Összehasonlítja a sztringeket a két kérdés egyikének megválaszolásához: Egyenlő-e ez a két sztring? vagy milyen sorrendben rendezik ezeket a sztringeket? A C# két független tényező szabályozását teszi lehetővé, amikor bármelyik kérdésre választ ad:
-
Kis- és nagybetűk érzékenysége – egyenlőnek kell-e
"Hello"tekinteni és"hello"kezelni őket. - Összehasonlítás típusa – sorszám (az egyes karakterek bináris értékének összehasonlítása) vagy kultúratudatos (a kultúra nyelvi szabályainak alkalmazása).
Az StringComparison enumerálás ezeket a tényezőket egyetlen értékben egyesíti, amelyet az összehasonlító módszereknek ad át.
Összehasonlítás egyenlőségre
A String.Equals metódus és a == operátor alapértelmezés szerint egy kis- és nagybetűket megkülönböztető, ordinális összehasonlítást végez. Az ordinális összehasonlítás ellenőrzi az egyes karakterek bináris értékét, így gyors, és minden gépen ugyanazt az eredményt adja. Egyértelművé teheti a szándékát azzal, hogy meghívja azt a túlterhelt változatot, amely egy StringComparison értéket fogad:
string root = @"C:\users";
string root2 = @"C:\Users";
// Equals and == both perform a case-sensitive, ordinal comparison.
Console.WriteLine(root.Equals(root2));
// => False
Console.WriteLine(root == root2);
// => False
// Pass a StringComparison value to state the intent explicitly.
Console.WriteLine(root.Equals(root2, StringComparison.Ordinal));
// => False
A kis- és nagybetűk figyelmen kívül hagyásához az ordinális szemantika megőrzése mellett adja át a következőt: StringComparison.OrdinalIgnoreCase
string root = @"C:\users";
string root2 = @"C:\Users";
// OrdinalIgnoreCase compares the binary values but ignores case.
bool equalIgnoringCase = string.Equals(root, root2, StringComparison.OrdinalIgnoreCase);
Console.WriteLine(equalIgnoringCase);
// => True
Összehasonlítás rendezési sorrend szerint
Az egyenlőség helyett a rendezési sorrend meghatározásához használja a következőt String.Compare: . Negatív számot, nullát vagy pozitív számot ad vissza annak jelzésére, hogy az első karakterlánc a második elé, vele azonos helyre vagy utána kerül-e a rendezési sorrendben:
string first = "Avocado";
string second = "Banana";
// Compare returns a negative number, zero, or a positive number
// to indicate sort order. Specify the comparison type explicitly.
int order = string.Compare(first, second, StringComparison.Ordinal);
Console.WriteLine(order < 0
? $"'{first}' sorts before '{second}'."
: $"'{first}' sorts at or after '{second}'.");
// => 'Avocado' sorts before 'Banana'.
Important
Compare és CompareTo alapértelmezés szerint kultúraérzékeny összehasonlítást használ, míg Equals és == alapértelmezés szerint ordinális összehasonlítást használ. A meglepetések elkerülése érdekében adjon meg egy explicit StringComparison értéket, hogy a kód meghatározza, hogy milyen viselkedést szeretne.
Hasonlítsa össze az állandókat mintaegyezéssel is vagy switch
Ha az összehasonlítandó érték állandó, akkor az is operátort állandó mintával használhatja olvasható alternatívaként a következőhöz ==:
string status = "Ready";
// When the right operand is a constant, the is operator and a
// constant pattern read as an alternative to ==.
if (status is "Ready")
{
Console.WriteLine("The system is ready.");
}
// => The system is ready.
Ha egy sztringet több állandóval szeretne összehasonlítani, használjon egyswitch kifejezést. Minden ág egy konstans mintát ellenőriz, az eldobó minta pedig (_) minden olyan értéket kezel, amelyre nincs egyezés. A következő példa egy irányt jelölő kulcsszót egy haladási utasításhoz rendel:
foreach (string heading in new[] { "North", "South", "East", "West", "NE" })
{
// A switch expression matches each constant pattern in turn and
// returns the first match. The discard (_) handles every other value.
string instruction = heading switch
{
"North" => "Travel due North for 10 km.",
"South" => "Travel due South for 10 km.",
"East" => "Travel due East for 10 km.",
"West" => "Travel due West for 10 km.",
_ => $"Unknown heading: {heading}.",
};
Console.WriteLine(instruction);
}
// => Travel due North for 10 km.
// => Travel due South for 10 km.
// => Travel due East for 10 km.
// => Travel due West for 10 km.
// => Unknown heading: NE.
A switch sztringkonstansokat vizsgáló kifejezés ugyanazt a kis- és nagybetűket megkülönböztető, ordinális összehasonlítást végzi, mint a ==, ezért a "north" nem egyezik a "North" ággal.
Válassza ki a megfelelő összehasonlítást
Az adatok alapján válassza meg az összehasonlítás típusát, ne megszokásból:
- Azonosítók, fájlútvonalak, protokolltokenek és más gép által meghatározott szövegek esetében használja a Ordinal elemet (vagy a OrdinalIgnoreCase elemet, ha nem kell megkülönböztetni a kis- és nagybetűket). Az ordinális összehasonlítás gyors és konzisztens a kultúrákban.
- A felhasználók által elolvasott és rendezett szövegekhez, például nevekhez vagy termékcímekhez használjon CurrentCulture úgy, hogy a megrendelés megfeleljen a felhasználó elvárásainak.
A kultúratudatos összehasonlítás olyan nyelvi szabályokat alkalmaz, amelyek kultúránként eltérőek, és meglepő eredményeket hozhatnak. Például egyes kultúrák a "ss" és a "ß" elemet egyenlőnek tekintik, és a karakterláncok sorrendje gépenként eltérhet. A variabilitás miatt tartsa fenn a kultúratudatos összehasonlítást a valódi természetes nyelvű szövegekhez, és használja ugyanazt az összehasonlítási típust, amikor egyszerre rendez és keres egy gyűjteményt.
A kulturális szempontból érzékeny összehasonlítás részletes ismertetését, beleértve a globalizációs szempontokat és a platformok közötti különbségeket is, lásd a .NET-beli sztring-összehasonlítás ajánlott eljárásai című témakörben.