c#中的int是否有类型安全的枚举转换?

时间:2013-11-13 17:45:30

标签: c# casting enums compiler-errors

我知道我可以使用强制转换

将int转换为枚举
MyEnumType myEnum = (MyEnumType) myInteger;

这里的问题是,如果myInteger的类型不是int

,那么运行时强制转换不会在构建时阻止我
void MyMethod(MyObject myObject)
{
    MyEnumType myEnum = (MyEnumType) myObject.someProperty;
    ....
}

以上不是一种不常见的代码模式,但如果对象的属性类型已更改,它将无法在构建时保护我。

是否有内置方法来执行此转换,这会给我一个构建时错误?当然,我可以很容易地编写一个通用的方法,但我想知道是否内置了它。

2 个答案:

答案 0 :(得分:2)

您可以轻松地为一个枚举创建一个方法:

public static MyEnumType CastFromInt<T>(int n)
{
    return (MyEnumType)n;
}

可悲的是,因为没有办法应用泛型约束,因此泛型类型参数是枚举,所以没有良好的方法来泛化它。你可以这样写:

public static T CastFromInt<T>(int n)
{
    return (T)(object)n;
}

但是假设调用者使用枚举作为T的类型。如果他们不这样做,那就有问题了。这也不必要地输入整数。

答案 1 :(得分:2)

您可以使用

Enum.TryParse(myInteger.ToString(), out result)

获取int的枚举值。

希望这有帮助,