9

可能重复:
将枚举转换为另一种类型的枚举

在不同类型的枚举之间进行转换时,是否可以像这样直接从一种类型转换为另一种类型?

LicenseTypes type;
TypeOfLicense type2;

type2 = (TypeOfLicense)type;

或者是否有必要先将枚举转换为 int?编译器不会抱怨,但我想确保我不会在运行时遇到某种时髦的强制转换异常。

这似乎是一件奇怪的事情,但两个枚举在结构和值上是相同的。在这种情况下,只有类型名称不同。

4

3 回答 3

9

虽然它是重复的,但我也标记了它。您可以进行简单的转换,因为基础类型是int,您可以这样做:

LicenseTypes type = (LicenseTypes)TypeOfLicense.value3;

这里type将保持值'0';

假设你有:

public enum LicenseTypes 
{
    value1,
    value2,
}
public enum TypeOfLicense
{
    value3, 
    value4,
    value5
}

但是,如果您尝试 CastTypeOfLicence.value5那么变量type将保存 int 值2

LicenseTypes type = (LicenseTypes)TypeOfLicense.value5;

您还可以查看此链接以创建用于枚举之间转换的扩展方法。(它是类似问题的公认答案)

于 2012-10-04T04:48:34.523 回答
3

不,但你可以做一些假设来做到这一点......

LicenseTypes type = LicenseTypes.Type1;
TypeOfLicense type2 = TypeOfLicense.Type2;

type2 = (TypeOfLicense)(int)type;

...这些假设就是这样。我们必须假设两者LicenseTypesTypeOfLicense基于int它们的价值。我们还必须假设从业务角度来看,将基础价值相互转换是相关的(但从技术角度来看,这实际上既不存在也不存在)。

请注意,这适用于其他基本类型,并且可以构建更复杂的转换,允许您通过转换在不同类型之间进行转换。

于 2012-10-04T04:45:04.567 回答
0

不管你怎么做,它只是将整数赋值给另一个变量。请记住,枚举在内部被视为整数,因此没有区别。

于 2012-10-04T04:48:19.973 回答