gpt4 book ai didi

c# - 枚举上最常见的 C# 按位运算

转载 作者:IT王子 更新时间:2023-10-29 03:29:47 25 4
gpt4 key购买 nike

我这辈子都记不起如何在位域中设置、删除、切换或测试位。要么我不确定,要么我把它们混在一起,因为我很少需要这些。因此,如果有一份“位备忘单”就好了。

例如:

flags = flags | FlagsEnum.Bit4;  // Set bit 4.

if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way?

您能否举例说明所有其他常见操作,最好是使用 [Flags] 枚举的 C# 语法?

最佳答案

我对这些扩展做了更多工作 - You can find the code here

我写了一些扩展方法来扩展我经常使用的 System.Enum...我并不是说它们是防弹的,但它们有帮助...评论已删除...

namespace Enum.Extensions {

public static class EnumerationExtensions {

public static bool Has<T>(this System.Enum type, T value) {
try {
return (((int)(object)type & (int)(object)value) == (int)(object)value);
}
catch {
return false;
}
}

public static bool Is<T>(this System.Enum type, T value) {
try {
return (int)(object)type == (int)(object)value;
}
catch {
return false;
}
}


public static T Add<T>(this System.Enum type, T value) {
try {
return (T)(object)(((int)(object)type | (int)(object)value));
}
catch(Exception ex) {
throw new ArgumentException(
string.Format(
"Could not append value from enumerated type '{0}'.",
typeof(T).Name
), ex);
}
}


public static T Remove<T>(this System.Enum type, T value) {
try {
return (T)(object)(((int)(object)type & ~(int)(object)value));
}
catch (Exception ex) {
throw new ArgumentException(
string.Format(
"Could not remove value from enumerated type '{0}'.",
typeof(T).Name
), ex);
}
}

}
}

然后像下面这样使用它们

SomeType value = SomeType.Grapes;
bool isGrapes = value.Is(SomeType.Grapes); //true
bool hasGrapes = value.Has(SomeType.Grapes); //true

value = value.Add(SomeType.Oranges);
value = value.Add(SomeType.Apples);
value = value.Remove(SomeType.Grapes);

bool hasOranges = value.Has(SomeType.Oranges); //true
bool isApples = value.Is(SomeType.Apples); //false
bool hasGrapes = value.Has(SomeType.Grapes); //false

关于c# - 枚举上最常见的 C# 按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/93744/

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