lambda表達式的一個優點是隻有在需要結果時才需要計算函數。C#lambda表達式和懶惰評估
在下面的(簡單)例如,文本功能僅被評估時,作者是本:
public static void PrintLine(Func<string> text, TextWriter writer)
{
if (writer != null)
{
writer.WriteLine(text());
}
}
不幸的是,這使得使用代碼有點難看。你不能用一個固定或可變稱呼它
PrintLine("Some text", Console.Out);
,並有打電話這樣說:
PrintLine(() => "Some text", Console.Out);
編譯器是無法從通過不斷「推斷」無參數的函數。有沒有計劃在未來版本的C#中改進這一點,或者我錯過了什麼?
UPDATE:
我只是找到了一個骯髒的黑客自己:
public class F<T>
{
private readonly T value;
private readonly Func<T> func;
public F(T value) { this.value = value; }
public F(Func<T> func) {this.func = func; }
public static implicit operator F<T>(T value)
{
return new F<T>(value);
}
public static implicit operator F<T>(Func<T> func)
{
return new F<T>(func);
}
public T Eval()
{
return this.func != null ? this.func() : this.value;
}
}
現在就可以定義功能:
public static void PrintLine(F<string> text, TextWriter writer)
{
if (writer != null)
{
writer.WriteLine(text.Eval());
}
}
與函數或調用它都值。
我同意。在添加過載的情況下,不可能區分[如果支持這種快捷方式]。 – Krisc 2010-04-27 18:22:33