【发布时间】:2016-08-23 02:24:33
【问题描述】:
这段代码不能用latest C# compiler编译:
public class Program
{
public static void Main()
{
IntEnum a = (IntEnum)-1;
}
}
public enum IntEnum : int { }
当你尝试编译它时,它会引发
(3,22,3,29):错误 CS0119:“IntEnum”是一种类型,在给定的上下文中无效
奇怪的是,将转换后的值更改为正数(例如 4),或使用 const 值(例如 int.MinValue),甚至用括号括起来像 (IntEnum)(-1) 将编译和工作美好的。但是,上面的示例没有。
这有什么原因吗? Roslyn 是否可能错误地解析了代码,这就是引发错误的原因?
【问题讨论】:
-
@Alexei:谢谢。所以“设计”,因为
IntEnum是用户定义的标识符,而不是预定义的类型。 (请记住,这是旧规范,显然是旧错误代码......但同样的事情也可能适用于 C# 6)。看来这对 C# 6 来说也不是什么新鲜事。 -
@PeterDuniho 我已将评论转换为答案,因为它记录在完全不同的错误中。
-
@AlexeiLevenkov:是的,我明白了。请注意,C# 6 编译器不会发出“完全不同的错误”,恕我直言,这是一个错误。错误消息并没有比“要强制转换负值,您必须将值括在括号中”更好。遗憾的是新编译器没有显示消息。
标签: c# .net enums casting roslyn