Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: porovnání string

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

Aktivity (1)
Avatar
Petr.Matras
Člen
Avatar
Petr.Matras: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.Matras
Člen
Avatar
Petr.Matras: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
Redaktor
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
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: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  +3 10.12.2013 12:54
Avatar
Petr.Matras
Člen
Avatar
Odpovídá na coells
Petr.Matras: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.