可能重复:
将枚举转换为另一种类型的枚举
在不同类型的枚举之间进行转换时,是否可以像这样直接从一种类型转换为另一种类型?
LicenseTypes type;
TypeOfLicense type2;
type2 = (TypeOfLicense)type;
或者是否有必要先将枚举转换为 int?编译器不会抱怨,但我想确保我不会在运行时遇到某种时髦的强制转换异常。
这似乎是一件奇怪的事情,但两个枚举在结构和值上是相同的。在这种情况下,只有类型名称不同。
可能重复:
将枚举转换为另一种类型的枚举
在不同类型的枚举之间进行转换时,是否可以像这样直接从一种类型转换为另一种类型?
LicenseTypes type;
TypeOfLicense type2;
type2 = (TypeOfLicense)type;
或者是否有必要先将枚举转换为 int?编译器不会抱怨,但我想确保我不会在运行时遇到某种时髦的强制转换异常。
这似乎是一件奇怪的事情,但两个枚举在结构和值上是相同的。在这种情况下,只有类型名称不同。
虽然它是重复的,但我也标记了它。您可以进行简单的转换,因为基础类型是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;
您还可以查看此链接以创建用于枚举之间转换的扩展方法。(它是类似问题的公认答案)
不,但你可以做一些假设来做到这一点......
LicenseTypes type = LicenseTypes.Type1;
TypeOfLicense type2 = TypeOfLicense.Type2;
type2 = (TypeOfLicense)(int)type;
...这些假设就是这样。我们必须假设两者LicenseTypes
并TypeOfLicense
基于int
它们的价值。我们还必须假设从业务角度来看,将基础价值相互转换是相关的(但从技术角度来看,这实际上既不存在也不存在)。
请注意,这适用于其他基本类型,并且可以构建更复杂的转换,允许您通过转换在不同类型之间进行转换。
不管你怎么做,它只是将整数赋值给另一个变量。请记住,枚举在内部被视为整数,因此没有区别。