编辑:增加了一个具有lambda表达式:
Func<int, int, bool> lessThan = (num1, num2) => num1 < num2;
Func<int, int, bool> greaterThan = (num1, num2) => num1 > num2;
public void Run()
{
int increment = -1;
int l = 0;
Func<int, int, bool> c = lessThan;
for (int i = 50; c(i, l); i = i + increment)
{
}
}
我相信人们会想出比这更优雅的解决方案,但在这里它是:
public enum Comparison
{
GreaterThan,
LessThan
}
public bool Compare(int a, Comparison c, int b)
{
if (c == Comparison.GreaterThan)
return a > b;
else if (c == Comparison.LessThan)
return a < b;
else
throw new ArgumentException();
}
public void Run()
{
int i = 50;
int increment = -1;
int l = 0;
Comparison c = Comparison.GreaterThan;
for (i; Compare(i, c, l); i = i + increment)
{
}
}
什么原因使用表达式而不是只是普通的Func委托? –
fearofawhackplanet
2010-05-04 17:53:14
使用func只会创建一个绑定到委托的匿名函数。它将在编译时构建。另一方面,将lambda分配给Expression会导致编译器发出可在运行时操作的表达式树。匿名方法不能。 – 2010-05-05 08:02:09