此代码无法使用最新的C#编译器进行编译:
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是否可能错误地解析了代码,这就是为什么会引发错误?
行为是预期的,并已记录在案,以使表达式(Var)-1
可以被解析。
编译器错误CS0075进入规格详细信息(我希望您代替CS0119或获得该错误):
要强制转换为负值,必须将该值括在括号中。如果要使用标识预定义类型的关键字进行强制转换,则不需要括号。否则,必须加上括号,因为(x)–y将不被视为强制转换表达式。根据C#规范的第7.6.6节:
从消歧规则得出,如果x和y是标识符,则(x)y,(x)(y)和(x)(-y)是强制转换表达式,而(x)-y不是,甚至如果x标识类型。但是,如果x是标识预定义类型(例如int)的关键字,则所有四种形式均为强制转换表达式(因为这样的关键字本身不可能是表达式)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句