枚举加减法和类型转换为什么加法需要类型转换而减法不需要类型转换?请参阅下面的代码了解我的要求publicenumStuff{A=1,B=2,C=3}varresultSub=Stuff.A-Stuff.B;//编译varresultAdd=Stuff.A+Stuff.B;//不编译varresultAdd2=(int)Stuff.A+Stuff.B;//编译注意:对于加法和减法,在上面的所有三个示例中,结果是否超出范围(枚举)都没有关系。好问题-我对第一行和第三行的工作方式感到惊讶。但是,它们在C#语言规范中得到支持-在7.8.4节中,它讨论了枚举添加:每个枚举类型隐式提供以下预定义运算符,其中E是枚举类型,U是E的基础类型:E运算符+(Ex,Uy)E运算符+(Ux,Ey)在运行时,这些运算符被称为(E)恰好((U)x+(U)y)在7.8.5节中:每个枚举类型隐式提供以下预定义运算符,其中E是枚举类型,U是E的基础类型:U运算符-(Ex,Ey)此运算符完全计算为(U)((U)x-(U)y))。也就是说,运算符计算x和y的序数值之差,结果的类型就是枚举的底层类型。E运算符-(Ex,Uy);运算符的计算方式与(E)((U)x-y)完全相同。换句话说,运算符从枚举的基础类型中减去一个值,产生一个枚举值。所以这就是编译器行为的原因-因为这是C#规范所说的:)我不知道这些运算符中的任何一个存在,而且我从未见过它们被故意使用。我怀疑他们存在的原因隐藏在EricLippert偶尔偷偷进入的语言设计会议记录中——但如果他们后悔添加这个功能没有好处,我也不会感到惊讶。然后,也许它们在某些情况下真的很有用:)枚举的默认值是0,1,2...所以在这种情况下,两个枚举之间的差异将创建另一个枚举(首先比较它们以确保从较大的枚举中减去较小的枚举)。添加一半的时间会产生一个太高而不能成为有效枚举的值。问题是在这种情况下“+”不是枚举值之间的加号。重要的是要理解+是一个运算符,没有规则定义它如何应用于操作数(Stuff.A和Stuff.B)以上就是C#学习教程:枚举加减法和Casting共享的所有内容,如果对大家有用,需要了解更多的C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
