Try..Catch a innerexception   otázka

VB.NET

Dobrý den,

jak definovat innerexception jako třetí parametr např. v tomto případě:

Public Property Firma() As Integer
        Set(ByVal value As Integer)
            If value < 0 Or value > 100 Then
                Dim MojeException As New ArgumentException("Hodnota neodpovídá rozsahu 0-100", "value", ZdeMuzeBytTretiParametrInnerException)
                Throw MojeException
            Else
                _id = value
            End If
        End Set
        Get
            value = _id
        End Get
    End Property

Nebo - pokud to takto dělám celá špatně -jak to řešíte vy?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konstruktory vyjímek mají běžně jako volitelný parametr právě innerException. V praxi to ale není vůbec potřeba nastavovat. Hodí se to pouze pro bližší diagnostiku vyjímky vzniklé během ladění (vyjímky vyvolané třídami .NET Frameworku). Pro běžné potřeby je plně dostačující vyvolat správný typ vyjímky (ve vašem případě chybně vyhazujete ArgumentException místo ArgumentOutOfRangeException) se správným popisem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji moc za rychlou odpověď. Ještě se zeptám

- (samozřejmě máte pravdu, že mám použít ArgumentOutOfRangeException) ale - čemu to vadí, když tam stejně hodím svojí "message" a svůj "parramName"?. Neberte to jako drzost, zajímá mě to (proč to lze použít a co se změní), protože mi kód fungoval....

- dám na Vaši radu a budu používat pouze správný typ vyjímky a správný popis, ale (strávil jsem nad tím bezvýsledně metodou pokus-omyl spoustu času, tak mě to zajímá), jakého typu má být ten třetí parametr nebo jak na příkladvypadat? Intelisense mě tam nenechalo nic napsat...

Ještě jednou díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jako message se používá výstižný popis vyjímky (např. "Zadaná hodnota je mimo povolený rozsah 0-100."), jako paramName název parametru. Z hlediska přehlednosti by bylo lepší místo value použít název vlastnosti (Firma). Ten třetí parametr innerException se jak už jsem psal běžně nepoužívá, ale normálně se do něj předá instance nové vyjímky, např.

Throw New Exception("Došlo k neočekávané chybě.", _
                    New ArgumentException("Neplatná hodnota.", _
                                          "index"))

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zak to mě nenapadlo. Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback