无法在C#中隐式地将枚举转换为整数

时间:2016-11-28 08:07:27

标签: c# enums casting type-conversion

我可以使用整数作为值定义枚举:

public enum FieldType 
{
    Bar = 0,
    Foo = 1
}

为什么C#不允许创建一个以整数为键的字典,并在创建时使用枚举值:

public Dictionary<int, Type> _fieldMapping = new Dictionary<int, Type>
{
    {FieldType.Bar, null},  # Error in VS
    {FieldType.Foo, null},  # Error in VS
}

我知道我可以做一个演员表,但是我想知道为什么当enum实际上是int时,enum无法隐式转换为int。

1 个答案:

答案 0 :(得分:8)

如果你能做到这一点,你根本就失去了使用枚举的一半 - 关键是要将它们作为单独的类型保留,以避免你犯错误涉及错误地使用类型。

在我看来,你的字典应该实际int作为关键 - 此时你有更安全的方法。根据您当前的期望,您希望能够使用任何(基于FileShare)枚举类型作为密钥,包括明确FieldType之类的内容不恰当的。

所以基本上,你应该问问自己,从根本上你是否有从字段类型到类型的地图,或者你是否真的有数字地图。换句话说,在没有查看Type的情况下,地图中从数字1到某些{{1}}的条目是否意味着什么? 1值代表什么?