問題:我剛剛寫了第一個使用c#lambda表達式的代碼。它有效,但我不確定這是否是最好的方式。任何建議更好的方式來做lambda表達式?在表達式中有許多代碼行似乎很奇怪,就像我在下面做的那樣。c#lambda表達式 - 將代表結果添加到通用列表
背景:我有一個通用的代表列表。每個委託函數返回一個枚舉值,指示函數中發生了什麼。在對委託進行評估時,如果它不是特定的枚舉值,我需要將枚舉添加到列表中。
免責聲明:這裏的代碼是非常通用的,真正的代碼實際上確實在代理中確定返回值的東西!
class Class1
{
public enum WhatHappened
{
ThingA,
ThingB,
Nothing
}
private delegate WhatHappened del();
public static List<WhatHappened> DoStuff()
{
List<del> CheckValues = new List<del>();
List<WhatHappened> returnValue = new List<WhatHappened> { };
CheckValues.Add(delegate { return method1(); });
CheckValues.Add(delegate { return method2(); });
CheckValues.ForEach(x =>
{
WhatHappened wh = x();
if (wh != WhatHappened.Nothing)
returnValue.Add(wh);
});
return returnValue;
}
private static WhatHappened method1()
{
return WhatHappened.Nothing;
}
private static WhatHappened method2()
{
return WhatHappened.ThingA;
}
}
注:我本來喜歡將所有的項目(見下文),然後除去我不想讓那些(WhatHappened.Nothing)拉姆達。
CheckValues.ForEach(x => returnValue.Add(x()));
這不會編譯除非你有一個foreach擴展方法撿到一些可枚舉善良。我也喜歡在行首寫上我的點:) – 2009-04-23 18:38:02
@Jon,我很習慣我的自定義LINQ方法,我忘記它們默認情況下不存在。已更新以避免我不擁有的擴展方法。我老實說在點之前或點之後來回點。我以前的偏好是點。但有些語言我用需要的字符爲(PowerShell和VB.Net)之後,所以我漂來回;) – JaredPar 2009-04-23 18:48:54