Entwickler-Ecke
IO, XML und Registry - Variable nicht erkannt
Mitmischer 1703 - So 27.12.09 11:55
Titel: Variable nicht erkannt
Hallo C#-Forum :)
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| try try var Data := new System.IO.StreamWriter (OutputFile); for i: Int32 := 0 to length(prims)-1 do begin if prims[i] then begin Console.WriteLine(i.ToString); Data.WriteLine(i.ToString); end; end; except on E : Exception do Console.WriteLine('Fehler beim Schreiben in Datei: ' + E.Message + E.InnerException); end; finally Data.Close; end; Console.ReadLine; |
Ich stehe vor folgendem Problem:
Ich habe eine Variable namens Data - doch im finally-Block kann Prism sie plötzlich nicht mehr finden - Wieso nicht?
JüTho - So 27.12.09 12:20
Hallo,
ich dachte, Prism würde wie Delphi arbeiten und die Deklaration der Variablen am Anfang einer Methode verlangen? Das stimmt anscheinend nicht, sondern Prism arbeitet in dieser Hinsicht wie C#.
Das Problem liegt im Gültigkeitsbereich der Variablen. Die Variable Data ist deklariert innerhalb des inneren try-Blocks; sie ist also nur dort gültig. Du musst also die Deklaration in den äußeren try-Block (der zu finally gehört) verschieben. Die Initialisierung gehört vermutlich ebenfalls dorthin; andernfalls könnte im finally-Block nicht Close ausgeführt werden.
Da lob ich mir doch die zusammenhängende Konstruktion try-catch-finally unter C#; die doppelte try-Konstruktion empfand ich unter Delphi immer als Krücke.
Gruß Jürgen
Mitmischer 1703 - So 27.12.09 12:40
Prism erlaubt da auch mitten im Quelltext ;)
Meine Konstruktion sieht jetzt so aus:
Delphi-Prism-Quelltext
1: 2: 3:
| try var Output := new System.IO.StreamWriter (OutputFile); try |
aber das Problem besteht immernoch.
jaenicke - So 27.12.09 13:04
Also analog zu Delphi würde ich das so erwarten:
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6:
| var Data := new System.IO.StreamWriter(OutputFile); try ... finally Data.Close; end; |
Das wäre auch logisch, denn wenn die Variable innerhalb des try-Blocks selbst deklariert ist, dann muss diese ja bei der Exception noch gar nicht deklariert sein (z.B. Exception in Zeile 1, Deklaration in Zeile 2). Und dann wäre sie in finally noch nicht vorhanden.
JüTho - So 27.12.09 14:25
Danke, Sebastian! Das war auch mein erster Gedanke, aber durch den Wechsel zwischen Delphi und C# und ohne Prism-Kenntnisse war ich mir zu unsicher und hatte das verworfen und nicht als Lösung erwähnt. Jürgen
Kha - So 27.12.09 14:52
Oder natürlich... ;)
Delphi-Prism-Quelltext
1: 2:
| using Data := new StreamWriter(OutputFile) do ... |
jaenicke - So 27.12.09 14:53
Ah, so sieht das bei Prism aus, von C# kannte ich das ja. :D
Direkt mal in den grauen Zellen abgespeichert. :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!