1


私はラムダ式が初めてです。それらを実践しながら学んでいます。for ループをラムダ式に変換する方法について質問があります。

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];
    }

4

2 に答える 2

2

この方法は簡潔かもしれません:

Colors currentValidColors = 
    colorStr.Split(',')
            .Select(EnumHelper.GetEnumFromString<Colors>)
            .Aggregate((a, b) => a | b);
于 2012-08-14T17:39:47.813 に答える
1

これはあなたが考えていることですか?ForEach 拡張メソッドは、ジェネリック リストでのみ使用できます。

Colors currentValidColors = 0;
colorStr.Split(new char[] { ',' })
.Select(p => EnumHelper.GetEnumFromString<Colors>(p))
.ToList()
.ForEach(c => currentValidColors |= c);
于 2012-08-14T17:22:21.670 に答える