gpt4 book ai didi

c# - 具有通用枚举的 HasFlag?

转载 作者:太空狗 更新时间:2023-10-29 20:17:53 26 4
gpt4 key购买 nike

我刚开始使用 C# 中的 Generics,但很早就遇到了一个问题,我如何在通用 Enum< 上调用 .HasFlag()/?

public class Example<TEnum> where TEnum : struct {
}

如何向它添加 [Flags] 属性?

最佳答案

调用实例方法无论如何都需要装箱,所以,既然你不能约束到Enum,就放弃泛型并使用Enum。例如,而不是:

void Something(TEnum enumValue, TEnum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}

这样做:

void Something(Enum enumValue, Enum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}

在通用方法中,您可以像这样实现您的目标:

void Something(TEnum enumValue, TEnum flags)
{
Enum castValue = (Enum)(object)enumValue;
Enum castFlags = (Enum)(object)flags;

if (castValue.HasFlags(castFlags))
//do something ...
}

如果您使用不是枚举的值类型调用方法,这将在运行时抛出异常。您还可以通过 ValueType 而不是 object 进行转换,因为已知类型参数表示值类型:

Enum castValue = (Enum)(ValueType)enumValue;

关于c# - 具有通用枚举的 HasFlag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519596/

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