C#,将变量强制转换为Enum.GetUnderlyingType

6
假设我有一个枚举,其底层类型为byte:
enum EmpType : byte
{
    Manager = 1,
    Worker = 2,
}

我可以将一些int文字转换为枚举类型的基础类型(在这种情况下是byte)吗?

类似这样的东西不起作用(错误:“; expected”):

byte x = (Enum.GetUnderlyingType(typeof(EmpType)))15;

我可以在不明确写出(byte)15的情况下转换为基础类型吗?

谢谢。


这个问题对我来说没有意义。你想通过这个花招实现什么? - Pieter Geerkens
1
Enum.GetUnderlyingType 返回一个 Type。因此,这是试图将 15 强制转换为 Type 类。 - Steven Wexler
@PieterGeerkens:他想将一个枚举类型转换为其基础类型,而无需再次指定该类型。 - Patashu
@Patashu:这很明显。问题是为什么,因为这更像是在寻找解决方案而不是真正的问题。而且试图将15转换为值范围从1到2的枚举的意义是什么? - Pieter Geerkens
@Pieter Geerkens:这只是一个理论问题。我不会在实际代码中实现它。只是想知道如何做到这一点。 顺便说一下,我没有将15强制转换为枚举值1或2,我正在尝试将其转换为字节值。 - Aremyst
你应该在原始帖子中说明这一点。错误的数据会导致错误的答案,并让你失去朋友。 - Pieter Geerkens
2个回答

6
我认为以下内容可以解决问题,但我不确定它是否在所有情况下都能实现所需的行为。
var x = Convert.ChangeType(15, Enum.GetUnderlyingType(typeof(EmpType)))

很高兴能帮忙!但是要小心,它相当奇怪。 - Steven Wexler
即使在未来,我发现这个通用的辅助方法非常有用,它可以枚举枚举中的所有标志,可选择检索基础类型的值。 - joakimriedel
这里有另一个有效且合理的应用:在以 switch-on-type 风格的 case 语句中将枚举类型视为其基础类型,并将其作为 object 参数传入。 - M-Pixel

1

我不完全确定你想做什么。以下是一个关于将整数转换为枚举类型和反之的相关问题,对于字节也适用。

是否可以将整数强制转换为枚举类型?

如果你想在运行时检测底层类型...这似乎很笨拙而且需要很多工作。你可以基于底层类型的名称进行case语句。由于类型安全方面的考虑,我不确定它会有什么好处。


不完全是我所寻找的,但感谢您提供的有用链接。 - Aremyst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接