问题:我刚刚写了第一个使用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