相关疑难解决方法(0)

如何比较C#中的标志?

我下面有一个标志枚举.

[Flags]
public enum FlagTest
{
    None = 0x0,
    Flag1 = 0x1,
    Flag2 = 0x2,
    Flag3 = 0x4
}
Run Code Online (Sandbox Code Playgroud)

我无法将if语句评估为true.

FlagTest testItem = FlagTest.Flag1 | FlagTest.Flag2;

if (testItem == FlagTest.Flag1)
{
    // Do something,
    // however This is never true.
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

.net c# enums flags attributes

149
推荐指数
9
解决办法
8万
查看次数

比较C#中的枚举标志

我需要检测是否在枚举值中设置了一个标志,哪个类型用Flag属性标记.

通常它是这样的:

(value & flag) == flag
Run Code Online (Sandbox Code Playgroud)

但是因为我需要通用泛型(有时在运行时我的事件只有一个"Enum"引用.我找不到一个简单的方法来使用&运算符.目前我这样做:

    public static bool IsSet<T>(this T value, T flags) where T : Enum
    { 
        Type numberType = Enum.GetUnderlyingType(typeof(T));

        if (numberType.Equals(typeof(int)))
        {
            return BoxUnbox<int>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(sbyte)))
        {
            return BoxUnbox<sbyte>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(byte)))
        {
            return BoxUnbox<byte>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(short)))
        {
            return BoxUnbox<short>(value, flags, (a, …
Run Code Online (Sandbox Code Playgroud)

c# generics enums flags casting

13
推荐指数
4
解决办法
1万
查看次数

C#中单个&符号的第二个含义是什么?

我在C#中使用单个&符号来表示"检查第二个条件语句,即使第一个条件语句为 ".

但以下似乎是一个不同的意义&彻底,任何人都可以解释如何i & 1在下面的示例?

List<int> scores = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
var evenScores = scores.Where(i => i % 2 == 0);
var evenScores2 = scores.Where(i => (i & 1) == 0);
Run Code Online (Sandbox Code Playgroud)

c# linq

10
推荐指数
4
解决办法
1万
查看次数

标签 统计

c# ×3

enums ×2

flags ×2

.net ×1

attributes ×1

casting ×1

generics ×1

linq ×1