Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem [C#] - vyvolání vyjímky

Dobré odpoledne.

Mám tohle:

try
                {
                    zadani = Convert.ToInt32(text.Text);                    
                }
                catch
                {
                    zadani = 10;
                }

do proměnné zadani (int) ukládám číslo z TextBoxu...pokud nic nezadám nebo zadám text (místo čísla), tak se mi vyvolá vyjímka v bloku catch - uloží se do této proměnné 10. Takhle to chci, ale ještě bych potřeboval vyvolat vyjímku, pokud zadám větší nebo naopak menší číslo než stanovím. Tz. zadám třeba 150 -> to nechci, tak vyvolám vyjímku. Jak to mám udělat?

Děkuju za odpovědi.:-)

Předmět Autor Datum
Mmmmm. Já osobně bych se s tímto "řešením" nespokojil. Bloky jako Try, catch a finally se obecně po…
Flash_Gordon 04.06.2008 15:25
Flash_Gordon
Aha, tak to jsem nevěděl, že by vyjímky nebyly až tak vhodný... A k tomu, co si napsal. Trochu bych…
bujj22 04.06.2008 15:40
bujj22
Funkce, která kontroluje vstup pro cela cisla by mohla vypadat nějak takto: Int32 vysledek; // Prom…
Flash_Gordon 04.06.2008 16:10
Flash_Gordon
A preco nenapises az po tom try-catch bloku if(zadani>150 || zadani<0) zadani=10; ? Nieco ti v tom…
MM.. 04.06.2008 15:36
MM..
V tomhle mi jistě nic nebrání, myslel jsem, že když už je část řešena pomocí vyjímek, tak (třeba pro…
bujj22 04.06.2008 15:42
bujj22
Tak pouzi if a throw v sekcii "try". Nechapem ako inac by si chcel testovat hodnotu, ked nie pomocou…
MM.. 04.06.2008 16:04
MM..
Máš pravdu, že to chci zbytečně složitě. Díky za odpověď. poslední
bujj22 04.06.2008 16:22
bujj22

Mmmmm. Já osobně bych se s tímto "řešením" nespokojil.

Bloky jako Try, catch a finally se obecně používají na něco hodně silného.
Například pokud program používá nějaké svoje soubory, ale nějaký Janek mu je v průběhu jeho spuštění někam přesune a nebo je uzamkne pro zápis (například je otevře v notepadu).

Takže kontrolovat uživatelův vstup přes try a catch je přece jenom trochu velký kanón na vrabce.
Kromě toho vyjímky mají další nepříjemnou vlastnost, která není vidět ani na úrovni kódu, dochází k tzv.
přepínání kontextu, což vadí když vyžaduješ výkon.

Namísto toho bych toto jako laik asi udělal v podobném duchu:

string a = "23";
string b = "asdf";

int x;
int y;

Console.WriteLine(Int32.TryParse(a, out x) ? x.ToString() : "Not a number");
Console.WriteLine(Int32.TryParse(b, out y) ? y.ToString() : "Not a number");

Console.ReadLine(); 

Funkce, která kontroluje vstup pro cela cisla by mohla vypadat nějak takto:

Int32 vysledek;  // Promenna pro ulozeni hodnoty, pro tuto demonstraci netreba - nepracujeme s ni dale
             
if(Int32.TryParse(text.Text.ToString(), out vysledek))
{
MessageBox.Show("Bylo vlozeno cislo: "+vysledek.ToString());
// Tady pokracuje korektni postup programu.
}
else
{
MessageBox.Show("Nebylo vlozeno cislo!");
return; 
}

Zpět do poradny Odpovědět na původní otázku Nahoru