C# Compiler Kauderwelsch
Hallo,
ich hatte mich ja kürzlich über die Qualität des Microsoft C#-compilers positiv geäußert.
Leider habe ich nun auch etwas schlechtere Erfahrungen gemacht. Folgender code
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { List aList = new List(); foreach (string str in aList) { Console.WriteLine(str); } string str = "Hallo"; } } }
erzeugt folgende Fehlermeldung:
Fehler 1 Eine lokale Variable mit dem Namen "str" kann in diesem Bereich nicht deklariert werden, weil dadurch "str" eine andere Bedeutung erhalten würde, was bereits im Bereich "untergeordnet" in anderer Bedeutung verwendet wird. c:\Temp\ConsoleApplication1\Program.cs 18 20 ConsoleApplication1
Alles klar?
Man könnte nun annehmen, dass der C#-Compiler anders als ein ANSI-konformer C++ Compiler den scope der ersten Deklaration von str nicht auf die foreach-Schleife beschränkt. Dann müsste man aber bei der Zuweisung an str nach der foreach-Schleife einfach die Deklaration weglassen können, was aber nicht der Fall ist.
Fehler 1 Der Name "str" ist im aktuellen Kontext nicht vorhanden. c:\Temp\ConsoleApplication1\Program.cs 18 13 ConsoleApplication1
Dieser Forumsbeitrag legt nahe, dass dieses Verhalten Absicht ist, die Dokumentation auf der MSDN website beschreibt aber einen wesentlich nachvollziehbareren Fall. Meiner Meinung nach ist das ein klarer Compiler-bug.
Liebe Leser, was meinen Sie dazu?
Viele Grüsse,
Andreas
Technorati Tags: C#, Compiler-bug
July 28th, 2008 at 8:18 am
[...] und bin recht zufrieden damit. Die Benutzung ist einfach und das Ergebnis ist ansprechend (Beispiel). Kleines goodie am Rande: das plugin setzt Sonderzeichen wie etwa < oder > automatisch in [...]