Select 使用 LINQ 枚举中的所有标记值
Select all flagged values in enum using LINQ
我有一组带标记的枚举,如下所示:
[Flags]
enum EnumThing
{
A = 1,
B = 2,
C = 4,
D = 8
}
我想 select 使用 LINQ 集合中的所有标志。假设集合是这样的:
EnumThing ab = EnumThing.A | EnumThing.B;
EnumThing ad = EnumTHing.A | EnumThing.D;
var enumList = new List<EnumThing> { ab, ad };
在位中它看起来像这样:
0011
1001
期望的结果是这样的:
1011
可以通过以下代码在纯 C# 中实现所需的结果:
EnumThing wishedOutcome = ab | ad;
或在 SQL 中
select 3 | 9
但是我如何使用 Linq select enumList
中的所有 selected 标志到一个新的 EnumThing
中?
您可以使用 LINQ Aggregate
函数:
var desiredOutcome = enumList.Aggregate((x, y) => x | y);
请注意,如果列表为空 - 将引发异常,因此在执行此操作之前检查列表是否为空。
var desiredOutcome = enumList.Count > 0 ?
enumList.Aggregate((x, y) => x | y) :
EnumThing.Default; // some default value, if possible
一个简单的 linq 解决方案是这样的:
EnumThing ab = EnumThing.A | EnumThing.B;
EnumThing ad = EnumThing.A | EnumThing.D;
var enumList = new List<EnumThing> { ab, ad };
var combined = enumList.Aggregate((result, flag) => result | flag);
我有一组带标记的枚举,如下所示:
[Flags]
enum EnumThing
{
A = 1,
B = 2,
C = 4,
D = 8
}
我想 select 使用 LINQ 集合中的所有标志。假设集合是这样的:
EnumThing ab = EnumThing.A | EnumThing.B;
EnumThing ad = EnumTHing.A | EnumThing.D;
var enumList = new List<EnumThing> { ab, ad };
在位中它看起来像这样:
0011
1001
期望的结果是这样的:
1011
可以通过以下代码在纯 C# 中实现所需的结果:
EnumThing wishedOutcome = ab | ad;
或在 SQL 中
select 3 | 9
但是我如何使用 Linq select enumList
中的所有 selected 标志到一个新的 EnumThing
中?
您可以使用 LINQ Aggregate
函数:
var desiredOutcome = enumList.Aggregate((x, y) => x | y);
请注意,如果列表为空 - 将引发异常,因此在执行此操作之前检查列表是否为空。
var desiredOutcome = enumList.Count > 0 ?
enumList.Aggregate((x, y) => x | y) :
EnumThing.Default; // some default value, if possible
一个简单的 linq 解决方案是这样的:
EnumThing ab = EnumThing.A | EnumThing.B;
EnumThing ad = EnumThing.A | EnumThing.D;
var enumList = new List<EnumThing> { ab, ad };
var combined = enumList.Aggregate((result, flag) => result | flag);