c# - 强制转换为无效枚举值 Enum.ToObject,不会引发异常,将 Enum 设置为 int

标签 c# .net casting enums linqpad

这是正常行为吗?

编写枚举类型

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/

相关文章:

c# - 如何跟踪内部广告系统的转化率(点击销售)?

c++ - 安全地将 2 个字节转换为短字节

go - 消除类型转换中的重复代码

c# - 挪威 CultureInfo 的问题

c# - Ninject InThreadScope 绑定(bind)

c# - 为什么将 IDictionary<TKey, TValue> 向上转换为 IEnumerable<object> 会失败?

c# - webapi2 owin,我无法启动项目

c# - 使用 NSubstitute 模拟 Web 服务时出错

c# - Visual c# Express Edition - 无法让 Acrobat pdf 阅读器工作

c# - 多个派生抽象类?