【发布时间】:2017-03-02 08:47:01
【问题描述】:
我正在使用反射来创建一个 lambda 函数。它适用于我尝试使用的大多数项目,但是在其中一个属性上它不断抛出不明确的匹配异常。
代码如下所示。当它到达Expression.PropertyOrField 时会发生错误。我使用的属性是decimal? 类型。我认为这可能与它是可空类型有关,但我不确定。
public static LambdaExpression CreateExpression(Type type, string propertyName, ref Type returnType)
{
var param = Expression.Parameter(type, "x");
Expression body = param;
foreach (var member in propertyName.Split('.'))
{
body = Expression.PropertyOrField(body, member);
}
returnType = body.Type;
return Expression.Lambda(body, param);
}
【问题讨论】:
-
可能您有多个属性(或字段)名称相同但大小写不同(如“TestProp”和“testProp”)。
-
@Evk 是对的,我用
decimal?测试了它,有和没有同名但大小写不同的属性。不幸的是,我不知道如何告诉Expression.PropertyOrField区分大小写。 -
嗯,改名确实解决了问题。但是没有任何其他具有相同名称的属性(除了一个小写且前面有
_的属性)。谢谢。
标签: c# linq reflection lambda