这是正常行为吗?
为
编写枚举类型1) 尝试文本解析 2) 回退到 int 解析。
int 解析永远不会抛出错误...
尝试在 LinqPad 中运行以下脚本,除了 linqpad 我没有测试过其他编译器,但我怀疑这是 Linqpad 的问题。
如果 int 匹配失败,如何抛出错误?
void Main()
{
FieldAttributes fieldattributeenum = FieldAttributes.Assembly;
B b = B.Valx1;
b.Dump("B = "+((int)b).ToString()); //Valx1 (11);
fieldattributeenum.Dump("fieldattributeenum = " +((int)fieldattributeenum).ToString()); //Assembly (3)
b = (B) Enum.ToObject(typeof(B), (int) fieldattributeenum);
b.Dump("B = "+((int)b).ToString()); //valcorrect3 (3)
A a = (A) Enum.ToObject(typeof(A), (int) fieldattributeenum); //
a.Dump("A = "+ ((int)a).ToString()); // ??? (3)
}
public enum B{
Valx1=11,
Valx2=12,
Valx3=13,
Valx4=14,
valcorrect3 = 3
}
public enum A{
Valx1=11,
Valx2=12,
Valx3=13,
Valx4=14,
valcorrect3
}
最佳答案
只需使用 Enum.IsDefined
。基本上枚举只是整数,您可以将任何整数分配给枚举,即使它未定义也是如此。
if(!Enum.IsDefined(typeof(A), a))
{
throw new InvalidCastException("Not a valid value for A: " + a);
}
关于c# - 强制转换为无效枚举值 Enum.ToObject,不会引发异常,将 Enum 设置为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386708/