Middle
Hogyan történik a sztringek összehasonlítása C#-ban? Összehasonlítják a sztring objektumok hivatkozásait?
sobes.tech MI
Válasz az MI-től
A C#-ban a szövegek összehasonlítása többféleképpen is történhet:
==operátor: Szöveg literálok esetén, és ha a szövegek tartalma megegyezik, az==operátortrueértéket ad vissza. Más referencia típusokkal ellentétben, a szövegeknél az==operátor felül van töltve, hogy a tartalmat hasonlítsa össze, nem a referenciákat.Equals()metódus: Ez a metódus szintén alapértelmezés szerint a szövegek tartalmát hasonlítja össze. Ajánlott a tartalom explicit összehasonlítására, és megbízhatóbb lehet, különösennull-lal való összehasonlításnál. Vannak túlterhelések, amelyek figyelembe veszik a kis- és nagybetűket, valamint a kultúrát.String.Compare()metódus: Egy statikus metódus, amely két szöveget összehasonlít, és egy egész számot ad vissza, ami a sorrendiség viszonyát mutatja közöttük. Különböző összehasonlítási paramétereket lehet megadni (kis/nagybetű érzékenység, kultúra stb.).String.CompareOrdinal()metódus: Byte-by-byte összehasonlítja a szövegeket, figyelmen kívül hagyva a kulturális sajátosságokat.String.CompareTo()metódus: Egy példány metódus, amely összehasonlítja az aktuális szöveget egy másik szöveggel vagy objektummal. Hasonló aString.Compare()-hez, de az objektumon hívják meg.
A szövegobjektumok referenciái nem kerülnek közvetlenül összehasonlításra az == operátorral vagy a Equals() metódussal (felhasználói túlterhelés nélkül) normál tartalom összehasonlítás esetén. Bár a szövegek referencia típusok, az == és az Equals() kifejezetten felül vannak töltve, hogy pontosan a tartalmat hasonlítsák össze.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Tartalom összehasonlítása
Console.WriteLine(str1 == str2); // true (tartalom összehasonlítva)
Console.WriteLine(str1.Equals(str2)); // true (tartalom összehasonlítva)
Console.WriteLine(str1 == str3); // true (tartalom összehasonlítva)
Console.WriteLine(str1.Equals(str3)); // true (tartalom összehasonlítva)
// Referencia összehasonlítás (kifejezett típuskonverzió vagy ReferenceEquals szükséges)
// Ebben az esetben, a str1 és str2 ugyanarra az objektumra mutathatnak
// a sztringek internálásának köszönhetően. A str3 valószínűleg külön objektum lesz.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // lehet, hogy true vagy false, a JIT és a CLR függvényében
Console.WriteLine(object.ReferenceEquals(str1, str3)); // valószínűleg false