C#Puzzle:可访问的转到指向无法访问的标签

Sol*_*ogi 4 c# goto

这是Eric Lippert在这篇文章中的评论:

现在您已经知道了答案,您可以解决这个难题:给我写一个程序,其中有一个可到达的goto到达一个无法访问的标签. - Eric Lippert 7月17日7:17

我无法创建一个代码,该代码具有指向无法访问标签的可访问goto.这甚至可能吗?如果是的话,C#代码会是什么样子?

注意:我们不讨论'goto'是如何不好等等.这是一个理论练习.

Sam*_*ell 13

我的原始答案:

    try
    {
        goto ILikeCheese;
    }
    finally
    {
        throw new InvalidOperationException("You only have cottage cheese.");
    }
ILikeCheese:
    Console.WriteLine("MMM. Cheese is yummy.");
Run Code Online (Sandbox Code Playgroud)

这里没有编译器警告.

    bool jumping = false;
    try
    {
        if (DateTime.Now < DateTime.MaxValue)
        {
            jumping = (Environment.NewLine != "\t");
            goto ILikeCheese;
        }

        return;
    }
    finally
    {
        if (jumping)
            throw new InvalidOperationException("You only have cottage cheese.");
    }
ILikeCheese:
    Console.WriteLine("MMM. Cheese is yummy.");
Run Code Online (Sandbox Code Playgroud)

  • 恭喜,这就是我想到的答案.goto是可以访问的,但它所针对的标签不是因为"finally"劫持了它.至少可以说,编译器中检测到这种情况的代码是晦涩的. (4认同)
  • 是的,这有点像"鸡肉和鸡蛋",如果可以到达的"goto"可以进入无法到达的标签,是不是可以使标签到达? (2认同)