簡體   English   中英

在C#中獲取通用標志枚舉值

[英]Getting common flags enum value in c#

說我有以下列舉

[Flags]
enum Letters
{
     A = 1,
     B = 2,
     C = 4,
     D = 8,
     E = 16,
     F = 32,
     AB = A | B,
     All = A | B | C,
}

如果我有變量:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;

我想要獲得這兩個枚舉之間的公共值,因此在這種情況下應該為A | D A | D 有人可以告訴我如何實現這一目標。

謝謝

您可以使用二進制&(和)運算符獲取該信息:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;
var sAndp = s & p; // This will give you only the common values ( A & D)

就像您使用| 要獲取值的並集,可以使用&來獲取交集:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;

var intersection = s & p;  // A | D
var union = s | p;         // All | D | E

結果如下:

    var result =  s & p;

如果適合您,它將返回各個標志的列表

 static IEnumerable<Enum> GetFlags(Enum input)
    {
        foreach (Enum value in Enum.GetValues(input.GetType()))
            if (input.HasFlag(value))
                yield return value;
    }

GetFlags(s).Intersect(GetFlags(p))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM