Avatar
jojo2100
Člen
Avatar
jojo2100:

Nevíte proč, když dám do kódu tohle

private void btnScitani_Click(object sender, EventArgs e)
{
int plus = Convert.ToInt16(label2.Text) + 1;
label2.Text = plus.ToString();
}

tak mi to nefunguje?

 
Odpovědět 25.5.2013 14:31
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jojo2100
David Čápka:

Protože ze stringu se parsuje.

Nahoru Odpovědět 25.5.2013 14:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jojo2100
Člen
Avatar
jojo2100:

A nechtěl bysto prosím více specifikovat? :D
Nebo aspoň jak to mám opravit.

Editováno 25.5.2013 14:43
 
Nahoru Odpovědět 25.5.2013 14:43
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jojo2100
David Čápka:

Convert se používá pouze mezi čísly, z textu se vždy parsuje, viz jeden z prvních tutoriálů zde: http://www.itnetwork.cz/…-a-parsovani

Kód upravíš takto:

int plus = int.Parse(label2.Text) + 1;
Nahoru Odpovědět 25.5.2013 14:46
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jojo2100
David Čápka:

Jinak je samozřejmě hloupost to stále převádět, ale měl bys to mít uložené v lokální proměnné formuláře, nebo ještě lépe objektu.

Nahoru Odpovědět 25.5.2013 14:48
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jojo2100
Člen
Avatar
jojo2100:

Jo moc ti děkuju.

 
Nahoru Odpovědět 25.5.2013 14:48
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:

Tak proč ta třída convert může vzít taky string a přeconvertovat ho na int? o_O

Editováno 25.5.2013 15:16
 
Nahoru Odpovědět 25.5.2013 15:16
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

A proč by nemohla, convert ti to vymění mezi datový typy, ale tomu asi ještě nerozumíš.

Nahoru Odpovědět 25.5.2013 16:00
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Asi nerozumím. Tak mi teda vysvětli jaký je rozdíl? Oboje vrací int, tak nevím proč by to nefungovalo.

string num = "10";
int n1 = int.Parse(num);
int n2 = Convert.ToInt32(num);
Editováno 25.5.2013 16:14
 
Nahoru Odpovědět 25.5.2013 16:13
Avatar
Odpovídá na Jan Vargovský
Michael Olšavský:

David Čápka v tomhle myslím neměl pravdu. Tady je definice z stackoverflow:

Have a look in reflector:

int.Parse("32"):

public static int Parse(string s)
{
return System.Number­.ParseInt32(s, NumberStyles.In­teger, NumberFormatIn­fo.CurrentInfo);
}
which is a call to:

internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
    byte* stackBuffer = stackalloc byte[1 * 0x72];
    NumberBuffer number = new NumberBuffer(stackBuffer);
    int num = 0;
    StringToNumber(s, style, ref number, info, false);
    if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
    {
        if (!HexNumberToInt32(ref number, ref num))
        {
            throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
        }
        return num;
    }
    if (!NumberToInt32(ref number, ref num))
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return num;
}

Convert.ToInt32("32"):

public static int ToInt32(string value)
{
    if (value == null)
    {
        return 0;
    }
    return int.Parse(value, CultureInfo.CurrentCulture);
}

Jednoduše metoda konvert vrací 0 pokud je parametr nulový. Jinak volá metodu int.Parse ;-)

 
Nahoru Odpovědět 25.5.2013 16:52
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

Přečti si tutorial, tam je hned v druhem nebo třetim díle že v c# musíš přetypovávat string na čísla pomocí int.Parse("10"). Pokud ti to leze na obtíž tak si vyber jazyk kde to dělat nemusíš.

Nahoru Odpovědět 25.5.2013 16:52
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Tato diskuze se nějak zvrhává. Pánové, cokoli se převádí z textu se vždy parsuje. Že něco jiného někdy volá Parse je hezké, ale není to důvod Parse implicitně nevolat, k tomu tam přeci je. Parsování počítá s chybami a odstraňuje třeba mezery okolo řetězce, rozdíl je i kdy se zaokrouhlí a podobně. Convert by se mělo používat jen mezi čísly.

Misaz: Parsování není přetypování, to je něco jiného.

Nahoru Odpovědět 25.5.2013 17:16
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:

Neodpověděl jsi na otázku, jaký je mezi tím rozdíl. Resp. vůbec nechápu proč mi říkáš, že musím přetypovat string na int - unikámi pointa proč jsi to vůbec psal?

 
Nahoru Odpovědět 25.5.2013 23:53
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

Tak ještě jednou, nechci se s tebou hádat, ale skusým ti to vysvětlit. int.Parse() parsuje vždy ze stringu, zatímco convert ti to převed v podstatě z čehokoliv. Na převod string > int se vždy používalo parse.

Jak říkám, až budeš mít více zkušeností i z OOP tak možná pochopíš na co tam je Convert. Teď to ber tak, že je tam pro srandu králikům.

Nahoru Odpovědět 26.5.2013 8:14
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:

Stále jsi mi neodpověděl rozdíl mezi těma dvouma metodama.

Když už do toho pleteš i oop, tak mě tím tuplem zajímá jaký je mezi nima rozdíl. Aby jsme si to ujasnili, já se neptám naco je třída Convert, ale jaký je rozdíl mezi těma dvouma metodama. Kdybys řekl, že je určitá konvence používat Parse, když převádíš string na int, tak sklapnu. Jen se musíš blbě povyšovat, ale moc ti to nejde? Googlovat umí každý, ty očividně mluvíš pokaždé o nečem jiném a neumíš normálně odpovědět.

Btw, řekl bych že hádka vypadá jinak. Já se pouze ptám a ty mi odpovídáš. Ale asi máme každý jinačí názor na to, jak vypadá hádka.

 
Nahoru Odpovědět 27.5.2013 2:21
Avatar
matesax
Redaktor
Avatar
Odpovídá na Jan Vargovský
matesax:

To snad pochopíš z názvu... Parse se zajímá o to, co je na ASCII pozici každého charu. Convert jen o ASCII...

Editováno 27.5.2013 6:55
 
Nahoru Odpovědět 27.5.2013 6:54
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

Představ si že jsem tam ten rozdíl napsal. Cituji sám sebe:

int.Parse() parsuje vždy ze stringu, zatímco convert ti to převed v podstatě z čehokoliv.
Nahoru Odpovědět 27.5.2013 9:25
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:

Nemyslím, si, že jsi v pozici, aby jsi se tu s námi mohl takhle dohadovat, když máš problém s parsováním čísla. Jak jsem ti psal, parsování je převod z textu, to je to, co ty tady děláš. Convert nedělá převod z textu, ale konverzi. To znamená, že vymyslí výsledek mezi nekompatibilními typy a třeba když mu dáš místo stringu null, vrátí ti nulu, zatímco Parse hodí chybu (což je správně, když v řetězci nic není).

Nahoru Odpovědět 27.5.2013 10:11
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 18 zpráv z 18.