Diskuze: Zachytávání vyjímek

C# .NET .NET (C# a Visual Basic) Zachytávání vyjímek American English version English version

Avatar
Posix
Člen
Avatar
Posix:

Zdravím, rovnou uvedu příklad v C++, ktery jede bez chyby

// pseudo c++
void vyhodVyjimku()
{
    throw Exception;
}
void funkce()
{
    vyhodVyjimku();
}
void main()
{
    try
    {
        funkce();
    }
    catch (Exception e)
    {
        cout << "chyba";
    }
}

V c# mi to ale hodí chybu, že jsem nezachytil chybu. Prostě hned po provedení funkce, která vyhodila vyjimku to chce nejak osetrit. Chapete, co tim myslim?

Odpovědět 8.3.2013 23:56
Proč to dělat jednoduše, když to jde složitě.
Avatar
Honza Bittner
Redaktor
Avatar
Honza Bittner:

zkoušels :

void neco(object sender, EventArgs e)
{}

neco(null,null);

?? :) nevím no jestli ti to pomůže no :)

Nahoru Odpovědět 9.3.2013 0:03
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Posix
Člen
Avatar
Posix:

Proč bych to dělal? Jak to souvisí s mým problémem? :D

Nahoru Odpovědět 9.3.2013 0:07
Proč to dělat jednoduše, když to jde složitě.
Avatar
Honza Bittner
Redaktor
Avatar
Honza Bittner:

no asi jsem to špatně pochopil :D neřeš mě :D

Nahoru Odpovědět 9.3.2013 0:08
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Posix
Člen
Avatar
Posix:

Tak mě napadlo, proč to asi dělá, ale nevim jak to vyresit. Ta funkce vyhodVyjimku se vola asynchronne (await vyhodVyjimku ()). Ted nevim, jestli se to pousti v jinem vlakne. Nebo je to uplna blbost?

Nahoru Odpovědět 9.3.2013 0:53
Proč to dělat jednoduše, když to jde složitě.
Avatar
Posix
Člen
Avatar
Posix:

Ok vyřešeno, místo void jsem dal Task. A bylo to tím async...

public async Task vyhodVyjimku() { ... }
Editováno 9.3.2013 1:07
Nahoru Odpovědět 9.3.2013 1:06
Proč to dělat jednoduše, když to jde složitě.
Avatar
marek.thunderbird:

Chtěl jsi něco takového?


private static void vyhodVyjimku()
{
throw new Exception("chyba");
}

private static void funkce()
{
vyhodVyjimku();
}

static void Main(string[] args)
{
try
{
Program.funkce();
}
catch (Exception e)
{
Console.Write­Line(e.Message);
Console.ReadKey();
}
}

 
Nahoru Odpovědět 9.3.2013 8:28
Avatar
Kit
Redaktor
Avatar
Odpovídá na Posix
Kit:

Nevím, jak se to dělá v C#, ale v Javě se do hlavičky funkce přidává klíčové slovo "throws" s rozhraním výjimky. Říká to překladači, že se výjimka má postoupit volající metodě.

Nahoru Odpovědět 9.3.2013 9:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Posix
David Čápka:

Nám pošli ten kód v C#, ne? :D

Nahoru Odpovědět 9.3.2013 11:08
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 9 zpráv z 9.