Forum: PC-Programmierung Dilemma mit try/catch in C#


von blahfasel (Gast)


Lesenswert?

Hallo,

ich stecke gerade in einem kleinen Dilemma in C#.
Ich möchte das Werfen einer Exception beim Instanziieren einer Klasse 
eine eigene Fehlermeldung ausgeben - soweit ja kein Problem.
Nur leider meckert mir Visual Studio an, dass mein Objekt bei folgendem 
Code leer ist:
1
MyClass foo;
2
try {
3
  foo = new MyClass(blah, blubb);
4
} catch {}
5
  Application.Exit();
6
}
7
foo.doSomething(); //hier wird gemeckert

was muss ich bei der Deklaration machen, damit der Compiler meinen Code 
durchlässt?
Wenn foo nicht gesetzt wird, wird die Anwendung ja beendet...

Viele Grüße

von Sven P. (Gast)


Lesenswert?

Keine Ahnung, wie das bei Super-Duper-.NET ist, aber in normalem C++:

blahfasel schrieb:
>
1
> /* Hier wird MyClass m.W.n. bereits instantiiert */
2
> MyClass foo;
3
> try {
4
>   /* new() erzeugt einen Zeiger, das hier geht in die Hose: */
5
>   foo = new MyClass(blah, blubb);
6
> /* catch mit einem leeren Anweisungsblock {}: */
7
> } catch {}
8
>   Application.Exit();
9
> /* Die } schließt dann vermutlich die ganze Funktion ab: */
10
> }
11
> /* Und dashier steht dann im Wald: */
12
> foo.doSomething(); //hier wird gemeckert
13
>

von Peter (Gast)


Lesenswert?

ja weil fool nicht immer initatilisiert ist. Teste mal mit
1
MyClass foo = NULL;
2
try {
3
  foo = new MyClass(blah, blubb);
4
} catch {}
5
  Application.Exit();
6
}
7
foo.doSomething(); //hier wird gemeckert

oder viel einfacher mit
1
MyClass foo = NULL;
2
try {
3
  foo = new MyClass(blah, blubb);
4
  foo.doSomething(); //hier wird gemeckert
5
} catch {}
6
  Application.Exit();
7
}

von Peter (Gast)


Lesenswert?

ich meinte
1
MyClass foo;
2
try {
3
  foo = new MyClass(blah, blubb);
4
  foo.doSomething(); //hier wird gemeckert
5
} catch {}
6
  Application.Exit();
7
}

von blahfasel (Gast)


Lesenswert?

Sorry, schneller getippt als gedacht.
das "}" direkt hinter "catch {" gehört da natürlich nicht hin.

das foo.doSomething() wird also im gleichen Kontext ausgeführt (oder 
auch nicht, wenn das new() in die Hose geht).

von blahfasel (Gast)


Lesenswert?

Peter schrieb:
> MyClass foo = NULL;
> try {
>   foo = new MyClass(blah, blubb);
> } catch {}
>   Application.Exit();
> }
> foo.doSomething(); //hier wird gemeckert

Danke, das war's.
Manchmal sieht man den Wald nicht mehr, weil schon alle Tannen gefällt 
sind ;)

Schönen Feiertag noch!

von Peter (Gast)


Lesenswert?

ich würde dir aber die andere Lösung empfehlen.
1
MyClass foo;
2
try {
3
  foo = new MyClass(blah, blubb);
4
  foo.doSomething();
5
} catch {}
6
  Application.Exit();
7
}

das ist wesentlich saubere, und ich sehe auch kein vorteil in der 
anderen Lösung.

von blahfasel (Gast)


Lesenswert?

Peter schrieb:
> das ist wesentlich saubere, und ich sehe auch kein vorteil in der
> anderen Lösung.

das foo.doSomething() kommt in einen weiteren try/catch-Block - ich will 
die Exceptions getrennt abfangen - war hier "nur" ein exemplarischer 
Codeblock.

von Peter (Gast)


Lesenswert?

dann macht man es aber so
1
try {
2
  MyClass foo = new MyClass(blah, blubb);
3
  try {
4
     foo.doSomething();
5
  } catch() {
6
      //todo
7
  }
8
} catch {}
9
  Application.Exit();
10
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.