IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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
jojo2100
Člen
Avatar
jojo2100:25.5.2013 14:31

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 Hartinger
Vlastník
Avatar
Odpovídá na jojo2100
David Hartinger:25.5.2013 14:38

Protože ze stringu se parsuje.

Nahoru Odpovědět
25.5.2013 14:38
New kid back on the block with a R.I.P
Avatar
jojo2100
Člen
Avatar
jojo2100:25.5.2013 14:43

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 Hartinger
Vlastník
Avatar
Odpovídá na jojo2100
David Hartinger:25.5.2013 14:46

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
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jojo2100
David Hartinger:25.5.2013 14:48

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
New kid back on the block with a R.I.P
Avatar
jojo2100
Člen
Avatar
jojo2100:25.5.2013 14:48

Jo moc ti děkuju.

 
Nahoru Odpovědět
25.5.2013 14:48
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na David Hartinger
Jan Vargovský:25.5.2013 15:16

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:25.5.2013 16:00

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
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:25.5.2013 16:13

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ý:25.5.2013 16:52

David Hartinger 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:25.5.2013 16:52

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
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:25.5.2013 17:16

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
New kid back on the block with a R.I.P
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:25.5.2013 23:53

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:26.5.2013 8:14

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
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:27.5.2013 2:21

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
matesax:27.5.2013 6:54

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:27.5.2013 9:25

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
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Vargovský
David Hartinger:27.5.2013 10:11

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
New kid back on the block with a R.I.P
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.