下午好,让我说我有枚举
public enum Test : int
{
TestValue1 = 0,
TestValue2,
TestValue3
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用Int32 IntTest = Test.TestValue1没有强制转换的语句IntTest = 0?如果我稍后决定在枚举中添加更多项目会很有用吗?我想我被迫使用Int32 IntTest = (Int32) Test.TestValue1,我认为这应该是多余的......而且,为什么我不能做出类似的东西
switch (IntTest)
{
case (Test.TestValue1) : DoSomething();
break;
case (Test.TestValue2) : DoSomethingElse();
break;
default : Do Nothing();
}
Run Code Online (Sandbox Code Playgroud)
?编译器说它期望一个恒定值代替TestValue1......这个值是不是恒定不变?
非常感谢你.
您不能使用Int32和Test互换,因为在语义上它们是不同的类型,即使它们碰巧使用相同的底层存储机制.
如果你需要一个Int32然后使用Int32; 如果你需要一个Test然后用一个Test; 如果你需要在它们之间进行转换,那么使用显式转换.
(当然,这种语言很容易被隐含地允许这些转换,但是这样的"特征"可能会产生比它解决的问题更多的问题.)
请注意,您可以这样做:
switch ((Test)IntTest)
{
case (Test.TestValue1) : DoSomething();
break;
case (Test.TestValue2) : DoSomethingElse();
break;
default : DoNothing();
}
Run Code Online (Sandbox Code Playgroud)
即使枚举中不存在该值,也可以保证从int转换为Test不会失败.如果枚举中不存在该值,则在Test实例上调用ToString()将返回基础数值的字符串表示形式.
| 归档时间: |
|
| 查看次数: |
16164 次 |
| 最近记录: |