在不同类型的枚举之间进行铸造时,是否可以像这样直接从一种类型向另一种类型进行直接铸造?
LicenseTypes type;
TypeOfLicense type2;
type2 = (TypeOfLicense)type;
还是有必要先将枚举转换为int?编译器不会抱怨,但我想确保我不会在运行时得到某种奇怪的转换异常。
这似乎是一件奇怪的事情,但这两个枚举在结构和价值上是相同的。在这种情况下,只有类型名称不同。
发布于 2012-10-03 20:48:34
虽然这是一个复制,我也标记了它。您可以进行简单的转换,底层类型是int
,您可以:
LicenseTypes type = (LicenseTypes)TypeOfLicense.value3;
这里,type
将持有‘0’值;
假设你有:
public enum LicenseTypes
{
value1,
value2,
}
public enum TypeOfLicense
{
value3,
value4,
value5
}
但是,如果您尝试转换TypeOfLicence.value5
,那么变量type
将保存int值2
。
LicenseTypes type = (LicenseTypes)TypeOfLicense.value5;
您还可以查看这个link来创建扩展方法,以便在枚举之间进行转换。(这是对类似问题的公认答案)
发布于 2012-10-03 20:45:04
不,但你可以做一些假设.
LicenseTypes type = LicenseTypes.Type1;
TypeOfLicense type2 = TypeOfLicense.Type2;
type2 = (TypeOfLicense)(int)type;
..。这些假设是这样的。我们必须假设LicenseTypes
和TypeOfLicense
的值都是基于int
的。我们还必须假设,从业务的角度来看,将基础值相互转换是相关的(但从技术角度来看,这实际上既不相关也不相关)。
请注意,这适用于其他基本类型,并且可以构建一个更复杂的转换,允许您使用转换在不同类型之间进行转换。
发布于 2012-10-03 20:48:19
不管你怎么做,它只是一个整数赋值给另一个变量。记住,枚举在内部被视为整数,因此它不会有任何区别。
https://stackoverflow.com/questions/12720346
复制相似问题