C# 从枚举中获取值

C# 从枚举中获取值,c#,enums,C#,Enums,我需要在enum DaysOfTheWeek中找到由List daysId过滤的值,并返回过滤后的枚举 我的枚举: [Flags] public enum DaysOfTheWeek { Sunday = 1, Monday = 2, Tuesday = 4, Wednesday = 8, Thursday = 16, Friday = 32, Saturday = 64, AllDays = 127, } - 我的整数列表: L

我需要在
enum DaysOfTheWeek
中找到由
List daysId
过滤的值,并返回过滤后的枚举

我的枚举:

[Flags]
public enum DaysOfTheWeek
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64,
    AllDays = 127,
}
-

我的整数列表:

List<int> daysId = new List<int> {1,3};
List daysId=新列表{1,3};

对您的问题没有把握。像这样的

var filtered  = daysId.Select(d=>(DaysOfTheWeek)(1<<(d-1))).ToList();

var filtered=daysId.Select(d=>(DaysOfTheWeek)(1也许我过于复杂了,但请检查以下内容:

int[] daysId = new int[] { 1, 3,48,127 };

Dictionary<int, List<DaysOfTheWeek>> result = new Dictionary<int, List<DaysOfTheWeek>>();

foreach (int id in daysId)
{
    result[id] = new List<DaysOfTheWeek>();
    BitArray ba = new BitArray(new int[]{id});
    for (int i=0;i<ba.Length;i++)
    {
        if (ba[i])
        {
            result[id].Add((DaysOfTheWeek)(1 << i));
            Console.WriteLine((DaysOfTheWeek)(1 << i));
         }                    
     }
    Console.WriteLine("id-" + id + " > " + (DaysOfTheWeek)id);                
}

Console.ReadKey();
int[]daysId=newint[]{1,3,48127};
字典结果=新字典();
foreach(daysId中的int id)
{
结果[id]=新列表();
BitArray ba=新的BitArray(新的int[]{id});

对于(int i=0;iSo,问题是什么?当我们制作
[Flags]enum
时,我们通常使用
0x001
0x002
0x004
0x008
0x010
,等等。它更容易使用(特别是当你有很多选择的时候。另外,
AllDays=Sunday | Monday |[…]
会更好,因为如果要添加或删除天数(或更改现有天数的值),则无需调整其值。什么是筛选器,预期结果是什么?它是包含筛选器还是排除筛选器?还不够清楚。虽然我完全不确定,但我怀疑OP希望以位掩码形式返回枚举值,而不是作为枚举。但是,正如我所说的-完全不确定。var filtered=daysId.Select(d=>(DaysOfTheWeek)d);当前不工作返回不正确,我需要返回按列表索引[1]和[3]过滤的枚举
var filtered  = daysId.Select(d=>(DaysOfTheWeek)(1<<(d-1))).ToList();
int[] daysId = new int[] { 1, 3,48,127 };

Dictionary<int, List<DaysOfTheWeek>> result = new Dictionary<int, List<DaysOfTheWeek>>();

foreach (int id in daysId)
{
    result[id] = new List<DaysOfTheWeek>();
    BitArray ba = new BitArray(new int[]{id});
    for (int i=0;i<ba.Length;i++)
    {
        if (ba[i])
        {
            result[id].Add((DaysOfTheWeek)(1 << i));
            Console.WriteLine((DaysOfTheWeek)(1 << i));
         }                    
     }
    Console.WriteLine("id-" + id + " > " + (DaysOfTheWeek)id);                
}

Console.ReadKey();