Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

26.04.2012, 23:34

Der Catch Block könnte aber selbst auch wieder werfen ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

26.04.2012, 23:53

Das ist richtig, aber sollte der finally-Block dann nicht eigentlich auch übersprungen werden? Müsste man mal testen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

13

26.04.2012, 23:57

MSDN über definitive Zuweisungen in Try-finally-Anweisungen:

Zitat von »MSDN«

Für eine try-Anweisung stmt der folgenden Form gilt:

try try-block finally finally-block
  • ...
  • Der definitive Zuweisungsstatus [einer Variablen] v am Anfang von finally-block ist mit dem definitiven Zuweisungsstatus von v am Anfang von stmt identisch.
- http://msdn.microsoft.com/de-de/library/aa691181.aspx

Das heißt wohl, dass die try- und catch-Blöcke keinen Einfluss auf den Zuweisungsstatus einer Variablen innerhalb eines finally-Blocks haben.

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

14

27.04.2012, 14:16

Ich bin grade über etwas gestolpert, dass ich nicht so ganz nachvollziehen kann. Folgender Code:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool test;
try
{
    test = true;
}
catch
{
    test = false;
}
finally
{
    if( test ) // error CS0165: Use of unassigned local variable 'test'
    {
    }
}


Ich finde es schon logisch, das dieser Fehler erzeugt wird, da der Compiler sicher nicht überprüft, welche Funktionen vorher/oder ob überhaupt irgendwelche Funktionen vorher in deinem Try-Block ausgeführt werden.
Ein Beispiel:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool test;bool test2;
try
{    test2 = 5;
    test = true;
}
catch
{
    test = false;
}
finally
{
    if( test ) // error CS0165: Use of unassigned local variable 'test'
    {
    }
}

Hier würde beispielsweise schon vor der Zuweisung von test in den Finally-Block gesprungen werden, somit könnte es theoretisch möglich sein, dass an dieser Stelle die Variable nicht zugewiesen wurde.
Ich finde es also schon logisch, wie der Compiler das hier gemacht hat.

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

15

27.04.2012, 14:27

Ähm nein das würde eine InvalidCastException auslösen (also jetzt mal davon abgesehen, dass das so gar nicht erst kompilieren würde), die vom catch-Block gefangen wird und dann eine zuweise von test erfolgt und somit in finally einen Wert hätte.

Aber Endgegner hat je schon den Grund genannt.

Werbeanzeige