C# interactive window 将 `Submission#30+E` 显示为枚举类型

C# interactive window displays `Submission#30+E` as type of an enum

如果我尝试在 Visual Studio 中使用 C# interactive window 在控制台中输出枚举的类型,语句 Submission#30+E 是什么意思:

> enum E { First, Second};
> Console.WriteLine(typeof(E));
Submission#30+E

这是C#交互的一个特点window。由于交互式 window 的工作方式,为实际编译的语言提供 REPL,交互式 window 将单独编译您发送给它的每一行。所以在内部,每个“提交”都是单独处理和编译的。

然后提交的索引从 0 开始。所以第一个提交被编译成 Submission#0,第二个被编译成 Submission#1 等等。在您的情况下,Submission#30 表示这是您在该 Visual Studio 会话期间发送到 C# 交互式 window 的第 31 个输入。

内部实际发生的是您提交的代码被编译成它自己的类型。因此,每次提交都会产生自己的类型,用于评估交互式输入。你猜对了,Submission#n就是那种类型。

您看到的其余部分是 +E。查看类型名称时,名称中的加号表示它是嵌套类型。考虑以下示例:

public class Foo
{
    public class Bar
    { }
}

此处,Bar 嵌套在 Foo 中。如果您查看 typeof(Foo.Bar).ToString()(在交互式提示中评估 typeof(Foo.Bar) 时调用),您会返回 Foo+Bar。所以你有 Bar 嵌套在 Foo.

所以回到你的情况,你有你需要了解发生了什么的所有部分:Submission#30+E 意味着它是第 31 次提交给交互式 window,并且有一个嵌套类型E 在自动创建的类型中 Submission#30

如果您考虑一下,这完全有道理:由于您提交给提示的所有内容都被编译成它自己的类型,因此类型定义必须嵌套在该自动创建的类型中。而这正是 E.

发生的事情