Who'da thunk it? #1
This is the first in an ongoing series on the non-obvious (to me, at least).
This question is from an internal mailing list. Should the following C# code compile?
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
goto exit;
exit:
}
}
}
My intial reaction was "Of course!" However, I was wrong. The compiler reports the following errors:
Error 1 Invalid expression term '}' line 13 column 9
Error 2 ; expected line 13 column 10
According to section 8.9.3 of the C# spec, "the target of a goto identifier statement is the labeled statement with a given label." Note that the target is a labeled statement, not an identifier. Since the smallest statement that qualifies as a labeled statement is the empty statement (a semicolon by itself), the label must be followed by at least a semi-colon to compile. So the correct code would be:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
goto exit;
exit:;
}
}
}
Who'da thunk it?
~Dan