作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想做一个扩展方法来检查枚举是否有标志。
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/
我是一名优秀的程序员,十分优秀!