【发布时间】:2017-07-31 21:36:00
【问题描述】:
如果我尝试在 Visual Studio 中使用 C# 交互窗口在控制台中输出枚举的类型,Submission#30+E 语句是什么意思:
> enum E { First, Second};
> Console.WriteLine(typeof(E));
Submission#30+E
【问题讨论】:
标签: c# c#-interactive
如果我尝试在 Visual Studio 中使用 C# 交互窗口在控制台中输出枚举的类型,Submission#30+E 语句是什么意思:
> enum E { First, Second};
> Console.WriteLine(typeof(E));
Submission#30+E
【问题讨论】:
标签: c# c#-interactive
这是 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 次提交到交互式窗口,并且在自动创建的内部有一个嵌套类型 E输入Submission#30。
如果您仔细想想,这完全有道理:由于您提交给提示的所有内容都被编译成它自己的类型,因此类型定义必须嵌套在自动创建的类型中。这正是 E 发生的事情。
【讨论】: