【问题标题】:Get values from enum从枚举中获取值
【发布时间】:2013-04-07 14:42:23
【问题描述】:

我需要在enum DaysOfTheWeek 中查找由List<int> daysId 过滤的值并返回过滤后的枚举

我的枚举:

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

-

var allValues = Enum.GetValues(typeof(DaysOfTheWeek));

我的整数列表:

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

【问题讨论】:

  • 那么问题是什么?
  • 当我们制作[Flags] enum时,我们通常使用0x0010x0020x0040x0080x010等。它更容易使用(尤其是当你有很多选项。另外,AllDays = Sunday | Monday | [...] 会更好,因为如果您想添加或删除天数(或更改现有天数的值),您不需要调整它的值。
  • 过滤器是什么,预期的结果是什么?它是包含还是排除过滤器?还不够清楚。

标签: c# enums


【解决方案1】:
var filtered = daysId.Select(d => (DaysOfTheWeek)d);

【讨论】:

  • 虽然我完全不确定,但我怀疑 OP 希望以位掩码形式返回枚举值,而不是作为可枚举值。但是,正如我所说 - 完全不确定。
  • var 过滤 = daysId.Select(d => (DaysOfTheWeek)d);目前不工作
  • 返回不正确,我需要按列表索引 [1] 和 [3] 返回过滤后的枚举
【解决方案2】:

不确定您的问题。像这样?

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

【讨论】:

    【解决方案3】:

    也许我过于复杂了,但请检查一下:

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

    检查输出,看看它是否是你想要的。如果需要,您可以使用直接转换为星期几,(DaysOfTheWeek)id 或者您可以分别获取每个 DaysOfTheWeek。上面两个我都做了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多