【发布时间】:2014-03-18 17:32:03
【问题描述】:
我正在尝试创建一个接受 lambda 并将其存储在内部的类。语法类似于:
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 是匿名类型,直到它被分配给表达式或委托,并且我(我相信)必须使用隐式运算符来获得我想要的语法,但除此之外我已经击中一堵墙。如果它们已经被分配给这样的变量,我可以在我的隐式运算符中使用 Expression 或 Func:
Expression<Func<T1, T2>> e = o => ...;
Func<T1, T2> f = o => ...;
Lambda<T1, T2> l1 = e, l2 = f;
但我更愿意只分配 lambda 本身并让班级找出细节。
【问题讨论】:
标签: c# lambda delegates expression implicit-conversion