如果我尝试在控制台中使用 Visual Studio 中的 C# 交互式窗口输出枚举的类型,该语句Submission#30+E
是什么意思:
> enum E { First, Second};
> Console.WriteLine(typeof(E));
Submission#30+E
这是 C# 交互式窗口的特征。由于交互式窗口的工作方式,为实际编译的语言提供 REPL,交互式窗口将分别编译您发送给它的每一行。因此,在内部,这些"提交"中的每一个都是单独处理和编译的。
然后从 0 开始对提交进行索引。所以第一次提交被编译成Submission#0
,第二次被编译成Submission#1
,依此类推。在您的情况下,Submission#30
意味着它是您在 Visual Studio 会话期间发送到 C# 交互窗口的第 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 次提交,并且在自动创建的类型Submission#30
内部E
嵌套类型。
如果你考虑一下,这是完全有意义的:由于你提交到提示的所有内容都被编译成它自己的类型,所以类型定义必须嵌套在该自动创建的类型中。这正是E
发生的事情.