【问题标题】:C# interactive window displays `Submission#30+E` as type of an enumC# 交互式窗口将 `Submission#30+E` 显示为枚举类型
【发布时间】: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


【解决方案1】:

这是 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 发生的事情。

【讨论】:

  • 感谢详细解释!
猜你喜欢
  • 2019-06-09
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2011-09-05
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多