c# try ohne catch-inhalt?

Gast #3207851
Lesenswert?
• ▲
▼
Hi,
ich möchte prüfen ob ein string der in einem objekt einer Tabelle landet 
eine Zahl ist.
wenn der string eine Zahl ist, so möchte ich das Obejt meiner Tabelle 
entsprechend markieren, ich hinterlege also die zusätzliche Information 
dass es ein Integer ist.
ist es keine Zahl, so wird das Datenformat string beibehalten, Es wird 
nichts gemacht!

Ich löse das in meiner Anwendung so:
1
Int32 i32Zahl;
2
try
3
{
4
  i32Zahl = Convert.ToInt32(Text);  // bei Text landen wir hier im catch!
5
  objektformat[cell] = Obj.Typ.Integer;  // Wert als Zahl markieren
6
}
7
catch
8
{
9
}

So, nun höre ich überall dass man keine unbehandelten catch-Blöcke haben 
soll. Aber ich verstehe nicht warum?
Wenn im oberen Beispiel der Text nicht nach int konvertiert werden kann, 
dann muss auch der Datentyp nicht geändert werden!
wieso also einen Inhalt (sprich "code"!!) beim catch hinschreiben!?

Ist das, was ich hier mache, wirklich so unschön?
Gast #3207855
Lesenswert?
• ▲
▼
Falk schrieb:
> wieso also einen Inhalt (sprich "code"!!) beim catch hinschreiben!?
> Ist das, was ich hier mache, wirklich so unschön?

ja ist es, wenn der code ein wenig länger wird, können auch mal andere 
Exceptions auftreten mit den man am anfang nicht gerechent hat. Dann 
such mal ewig nach so einen Fehler.

Und dieser code lässt sich mit tryParse eh lesbarer schreiben

http://msdn.microsoft.com/de-de/library/vstudio/f02979c7.aspx
#3207908
Lesenswert?
• ▲
▼
Falk schrieb:
> So, nun höre ich überall dass man keine unbehandelten catch-Blöcke haben
> soll. Aber ich verstehe nicht warum?

Wenn es für das Wiederaufsetzen egal ist, was die Ursache für eine 
Ausnahme ist und diese Ausnahmen nicht abgeschaltet werden können, dann 
ist ein leerer catch-Block eine sinnvolle Lösung.

Zum Debug kann man solche Ausnahmen natürlich zu Diagnosezwecken 
abfangen.

Richtige Probleme kann man allerdings bekommen, wenn man, ungetesteten 
Code im try-Block ruft.
Gast #3208090
Lesenswert?
• ▲
▼
Ich vermute tryParse wird intern genau dass machen was du in deinem try 
block hast und je nach dem ob die Funktion eine exception geworfen hat 
true oder false zurückgeben.

Gekapselt sie das natürlich schicker aus und ist wartbarer
Gast #3208187
Lesenswert?
• ▲
▼
Vermuter schrieb:
> Ich vermute tryParse wird intern genau dass machen was du in deinem try
> block hast und je nach dem ob die Funktion eine exception geworfen hat
> true oder false zurückgeben.

und warum soll es nicht andersrum sein? Bei dem convert wird intern ein 
TryParse aufgerufen und wenn das false liefert, dann wird eine exception 
geworfen.
#3208326
Lesenswert?
• ▲
▼
Peter II schrieb:
> Vermuter schrieb:
>> Ich vermute tryParse wird intern genau dass machen was du in deinem try
>> block hast und je nach dem ob die Funktion eine exception geworfen hat
>> true oder false zurückgeben.
>
> und warum soll es nicht andersrum sein? Bei dem convert wird intern ein
> TryParse aufgerufen und wenn das false liefert, dann wird eine exception
> geworfen.

So ähnlich.
TryParse (und auch die entsprechenden Methoden in Convert und Int32) 
rufen Methoden aus der Number-Klasse auf (ParseInt32, TryParseInt32, 
usw.), die dort irgendwann bei ParseNumber landen...

http://referencesource.microsoft.com/netframework.aspx

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren