Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr.M
Člen
Avatar
Petr.M:10.12.2013 12:04

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.M
Člen
Avatar
Petr.M:10.12.2013 12:19

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
Tvůrce
Avatar
Juraj Mlich:10.12.2013 12:22

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
Avatar
coells
Tvůrce
Avatar
Odpovídá na Petr.M
coells:10.12.2013 12:54

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
10.12.2013 12:54
Avatar
Petr.M
Člen
Avatar
Odpovídá na coells
Petr.M:10.12.2013 14:01

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.