3

我知道我可以使用强制转换将 int 转换为枚举

MyEnumType myEnum = (MyEnumType) myInteger;

这里的问题是,如果 myInteger 不是类型,则运行时强制转换不会在构建时阻止我int

void MyMethod(MyObject myObject)
{
    MyEnumType myEnum = (MyEnumType) myObject.someProperty;
    ....
}

以上代码模式并不少见,但如果对象的属性类型已更改,它不会在构建时保护我。

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

4

2 回答 2

2

您可以轻松地为您的一个枚举创建一种方法来执行此操作:

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

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

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

但这假设调用者使用枚举作为T. 如果他们不这样做,那就有问题了。这也不必要地将整数装箱。

于 2013-11-13T17:57:00.353 回答
2

您可以使用

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

获取 int 的 Enum 值。

希望这可以帮助,

于 2013-11-13T17:57:45.820 回答