我是lambda表達式的新手;我正在通過實施它們來學習。我有一個關於如何將for循環轉換爲lambda表達式的問題。用於OR表達式連接的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];
}
如果我理解你的權利,你所要求的LINQ溶液(lambda表達式只是創建匿名函數的方式) – elyashiv 2012-08-14 17:17:15
不知道如果我的理解你的問題。您是否遇到當前代碼的問題,或者您想要對當前代碼進行不同的實現?爲了將字符串描述轉換爲Enums,你可以使用Enum.Parse()或Enum.TryParse() – 2012-08-14 17:19:30
你會想看看'aggregate'擴展方法來將所有'Colors'聚合成一個'Colors'。在一個側面說明中,「Colors」實際上代表一種顏色,所以您應該相應地重命名它。 – Servy 2012-08-14 17:22:28