我正在使用反射來創建lambda函數。它適用於我嘗試使用的大多數項目,但是在其中一個屬性中,它會一直拋出不明確的匹配異常。Expression.PropertyOrField中的AmbiguousMatchException
代碼如下所示。當它遇到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
@Evk是對的,我用'decimal?'測試了它,它有和沒有相同名稱但不同外殼的屬性。 Unfortunatley,我不知道如何告訴'Expression.PropertyOrField'區分大小寫。 –
嗯,更改名稱確實解決了問題。雖然沒有其他名稱相同的屬性(除了小寫字母,前面有一個「_」)。謝謝。 – user2657943