gpt4 book ai didi

c# - 具有强类型枚举类型的方法参数

转载 作者:行者123 更新时间:2023-11-30 14:41:48 25 4
gpt4 key购买 nike

考虑以下代码

enum HorizontalAlignment { Left, Middle, Right };
enum VerticleAlignment { Top, Middle, Bottom };

function OutputEnumValues (Type enumType)
{
foreach (string name in Enum.GetNames(typeof(enumType)))
{
Console.WriteLine(name);
}
}

可以这样称呼

OutputEnumValues (typeof(HorizontalAlignment));
OutputEnumValues (typeof(VerticleAlignment ));

但我可能会不经意地调用,例如

OutputEnumValues (typeof(int));

这将编译但在运行时在 Enum.GetNames() 处失败

任何编写方法签名的方法都可以在编译时捕获此类问题 - 即只接受 OutputEnumValues 中的枚举类型?

最佳答案

每个枚举类型都是一个整数(可以是 8 位、16 位、32 位或 64 位,有符号或无符号)。您可以将整数 0 转换为任何枚举类型,它将成为静态类型为枚举的值。

此外,您可以使用 Enum 类型的参数来确保只传入枚举值,而不知道实际的枚举类型。

因此,我的解决方案如下所示:

public static void OutputEnumValues(Enum example)
{
foreach (string name in Enum.GetNames(example.GetType()))
{
Console.WriteLine(name);
}
}

然后:

OutputEnumValues((HorizontalAlignment) 0);
OutputEnumValues((VerticalAlignment) 0);

这适用于所有枚举类型,无论它们的基础整数类型如何。

关于c# - 具有强类型枚举类型的方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com