我試圖創建一個需要lambda並將其存儲在內部的類。語法是這樣的:隱式運算符和lambdas
class Lambda<TIn, TOut> {
private Expression<Func<TIn, TOut>> expr;
private Func<TIn, TOut>> func;
public Lambda(Expression<Func<TIn, TOut>> e) {
expr = e;
}
public Lambda(Func<TIn, TOut> f) {
func = f;
}
public static implicit operator Lambda<TIn, TOut>([lambdatype] o) {
return new Lambda(o);
}
}
用法:
Lambda<TIn, TOut> l = o => ... ;
,但我有一些麻煩搞清楚細節。我知道一個lambda類型是一個anon類型,直到它被分配給一個表達式或一個委託,並且我會(我相信)必須使用一個隱式運算符來獲取我要去的語法,但除此之外,一堵牆。我可以使用表達或FUNC。在我隱運營商如果他們已經被分配給一個變量,像這樣:
Expression<Func<T1, T2>> e = o => ...;
Func<T1, T2> f = o => ...;
Lambda<T1, T2> l1 = e, l2 = f;
但我更喜歡只分配拉姆達本身有級人物有關的細節。
啊,我希望能避免:(好了,好了回覆感謝 –
@SLaks - !我試圖寫一個類型轉換隱運營商從明確的類型完全可行的,但我想。將操作符抽象爲一個可以放置操作符的基類型(例如,BaseViewModel),這對黃皮帶程序員來說甚至可能或者只是一個管道夢?如果它值得單獨的問題,讓我知道,我會發佈一個 –
@SLaks - 或者一個接口,如果可能的話......只是強制操作符被實現用於類型轉換的東西...在這種情況下,從'BaseViewModel'繼承的'TViewModel'類,被迫執行操作符並定義轉換(例如'this.Prop1 = that.Prop1;') –