Diskuze: porovnání string

C# .NET .NET (C# a Visual Basic) porovnání string American English version English version

Avatar
Petr.Matras
Člen
Avatar
Petr.Matras:

Ahoj, je nějaký rozdíl mezi:

if(a.Equals("ano"))

a

if(a == "ano")
Editováno 10.12.2013 12:05
Odpovědět 10.12.2013 12:04
Sometimes you just do things. - Scott Jurek
Avatar
Petr.Matras
Člen
Avatar
Petr.Matras:

Sorry, už jsem si to zjistil na netu, zmátlo mě to, protože v Javě to šlo pouze přes string.Equals(...)

Nahoru Odpovědět 10.12.2013 12:19
Sometimes you just do things. - Scott Jurek
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

String v C# má preťažený operátor. Preto sa porovnáva obsah a nie referencia. Funguje to iba pri Stringu.

Nahoru Odpovědět 10.12.2013 12:22
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
coells
Redaktor
Avatar
Odpovídá na Petr.Matras
coells:

V C# existuje více možností, ale musíš být opatrný, protože se občas stane nečekaná věc:

private static void m1()
{
    string a = "ahoj";
    string b = "aho" + 'j';
    bool test1 = (a == b); // true, pretizeny operator vola string.Equals()
    bool test2 = a.Equals(b); // true
}

private static void m2()
{
    object a = "ahoj";
    object b = "ahoj";
    bool test1 = (a == b); // true, je to test na instanci, ale protoze "ahoj" je identicka konstanta, projde
    bool test2 = a.Equals(b); // true
}

private static void m3()
{
    object a = "ahoj";
    object b = "aho" + 'j';
    bool test1 = (a == b); // false, b neni konstanta a kontroluji se instance
    bool test2 = a.Equals(b); // true, string.Equals() je overriden
}

private static void m4()
{
    string a = "ahoj";
    object b = "aho" + 'j';
    bool test1 = (a == b); // false
    bool test2 = a.Equals(b); // true
}

private static void m5()
{
    string a = "AHOJ";
    string b = "ahoj";
    bool test1 = string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase); // true
}

Dále se jednotlivé varianty liší testováním na null. Statické metody včetně operátorů umí zkontrolovat null korektně. Poslední varianta pak umožňuje kontrolovat stringy v různých kulturách.

 
Nahoru Odpovědět  +3 10.12.2013 12:54
Avatar
Petr.Matras
Člen
Avatar
Odpovídá na coells
Petr.Matras:

Díky moc za obsáhlou odpověď.

Nahoru Odpovědět 10.12.2013 14:01
Sometimes you just do things. - Scott Jurek
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.