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();