gpt4 book ai didi

用于检查枚举是否设置了标志的 C# 扩展方法

转载 作者:太空狗 更新时间:2023-10-29 22:24:38 25 4
gpt4 key购买 nike

我想做一个扩展方法来检查枚举是否有标志。

DaysOfWeek workDays = DaysOfWeek.Monday | DaysOfWeek.Tuesday | DaysOfWeek.Wednesday;
// instead of this:
if ((workDays & DaysOfWeek.Monday) == DaysOfWeek.Monday)
...

// I want this:
if (workDays.ContainsFlag(DaysOfWeek.Monday))
...

我怎样才能做到这一点? (如果已经有一个类已经这样做了,那么我将不胜感激解释如何对其进行编码;我已经在这个方法上胡思乱想了太久了!)

提前致谢

最佳答案

.NET 4 已经包含此功能,因此,如果可能,请升级。

days.HasFlag(DaysOfWeek.Monday);

如果无法升级,这里是上述方法的实现:

public bool HasFlag(Enum flag)
{
if (!this.GetType().IsEquivalentTo(flag.GetType())) {
throw new ArgumentException(Environment.GetResourceString("Argument_EnumTypeDoesNotMatch", flag.GetType(), this.GetType()));
}

ulong uFlag = ToUInt64(flag.GetValue());
ulong uThis = ToUInt64(GetValue());
return ((uThis & uFlag) == uFlag);
}

您可以轻松构建等效的扩展方法:

public static bool HasFlag(this Enum @this, Enum flag)
{
// as above, but with '@this' substituted for 'this'
}

关于用于检查枚举是否设置了标志的 C# 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928408/

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