Jam*_* Ko 5 .net c# enums casting roslyn
此代码不能使用最新的C#编译器进行编译:
public class Program
{
public static void Main()
{
IntEnum a = (IntEnum)-1;
}
}
public enum IntEnum : int { }
Run Code Online (Sandbox Code Playgroud)
当你试图编译它时,它会引发
(3,22,3,29):错误CS0119:'IntEnum'是一种类型,在给定的上下文中无效
奇怪的是,将转换值更改为正数(例如4),或使用const值(例如int.MinValue),或者甚至用括号括起来的值(IntEnum)(-1)将编译并正常工作.但是,上述样本没有.
这有什么理由吗?是否有可能Roslyn可能错误地解析了代码,这就是为什么错误会被提升?
期望并记录行为以允许(Var)-1解析表达式.
编译器错误CS0075进入规范细节(我希望你得到这个错误/除了CS0119):
要转换负值,必须将值括在括号中如果使用标识预定义类型的关键字进行转换,则不需要括号.否则,必须放括号,因为(x)-y不会被视为强制转换表达式.从C#规范,第7.6.6节:
根据消歧规则,如果x和y是标识符,则(x)y,(x)(y)和(x)( - y)是强制转换表达式,但(x)-y不是,甚至如果x标识一个类型.但是,如果x是标识预定义类型(例如int)的关键字,则所有四种形式都是强制转换表达式(因为这样的关键字本身不可能是表达式).
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |