【发布时间】:2009-09-14 04:04:39
【问题描述】:
我正在尝试根据满足特定条件对某些内容进行序列化。
为此,我最初的希望是在对象的属性上使用包含 lambda 表达式的属性。
但是,由于无法做到这一点,我已经决定在类中有一个 Func
Func<SomeObject, bool> func = (p => p.Value == 4);
[FuncAtt(typeof(SomeObject), "func")]
public SomeObject PropertyName { get; set;}
在我的序列化程序中,我需要调用这个 Func
假设我有一个类型 t,在这种情况下它等于 typeof(SomeObject),或者更抽象地说,typeof(T)。我也可以得到 Func
我的幼稚做法是这样的:
object func = typeof(MyClass).GetField(attribute.FuncName).GetValue(MyClassInstance);
Type funcType = typeof(Func<,>).MakeGenericType(attribute.Type, typeof(bool));
ParameterExpression p = Expression.Parameter(attribute.Type, objectToSerialize);
LambdaExpression l = Expression.Lambda(funcType, func, p); /* Won't work */
但这会导致将 lambda 转换为委托的问题,这显然是错误的。
我用这个代替了“func”:
(Expression)((Action)(() => func))
但这依赖于 func 是一个方法调用而不是 lambda。
那么,谁能指出我正确的方向?
【问题讨论】:
标签: c# generics reflection dynamic lambda