編輯:增加了一個具有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