我是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];
}
答案 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);