OR表达式连接的Lambda实现

时间:2012-08-14 17:05:41

标签: c# lambda


我是lambda表达式的新手;我正在通过实施它们来学习。我有一个关于如何将for循环转换为lambda表达式的问题。

EnumHelper.GetEnumFromString是一个辅助方法,它接受字符串描述并发回枚举。


 [Flags]
    public enum Colors
    {
        [DescriptionAttribute("YL")]
        Yellow = 1,
        [DescriptionAttribute("RD")]
        Red = 2,
        [DescriptionAttribute("GR")]
        Green = 4
    }

 string colorStr = "GR,RD";
 List<Colors> clrs = colorStr.Split(new char[] { ',' }).Select(p => EnumHelper.GetEnumFromString<Colors>(p)).ToList();
 Colors currentValidColors = Colors.Green;

    for (int i = 0; i < clrs .Count; i++)
    {
         if (i == 0)
              currentValidColors = clrs [i];
          else
              currentValidColors = currentValidColors | clrs [i];
    }

2 个答案:

答案 0 :(得分:2)

这种方式可能很简洁:

Colors currentValidColors = 
    colorStr.Split(',')
            .Select(EnumHelper.GetEnumFromString<Colors>)
            .Aggregate((a, b) => a | b);

答案 1 :(得分:1)

这是你在想什么? ForEach扩展方法仅适用于通用列表。

Colors currentValidColors = 0;
colorStr.Split(new char[] { ',' })
.Select(p => EnumHelper.GetEnumFromString<Colors>(p))
.ToList()
.ForEach(c => currentValidColors |= c);