我已经构建了一个表达式树,从一个类中推导出参数并调用它们来设置另一个类中的值。对于大多数类型,它都非常有效,但是对于派生类型,它会失败。如果我有:
public class A
{
public string MyString {get; set;}
}
并且
public class B : A
{
}
如果我使用这个表达式树代码(其中
value
是派生实例):// Get the type of the object for caching and ExpressionTree purposes
var objectType = value.GetType();
// Define input parameter
var inputObject = Expression.Parameter( typeof( object ), "value" );
var properties = objectType.GetProperties( BindingFlags.Instance | BindingFlags.Public );
foreach (var property in properties)
{
Expression.Property( Expression.ConvertChecked( inputObject, property.DeclaringType ), property.GetGetMethod() )
}
我会收到这个异常:
{System.ArgumentException: The method 'My.Namespace.A.get_MyString' is not a property accessor
at System.Linq.Expressions.Expression.GetProperty(MethodInfo mi)...
这里我做错了什么?
Expression.Property
接受一个派生的ReflectedType
的PropertyInfo
,但不接受一个具有派生ReflectedType
的MethodInfo
,这仍然看起来像是一个错误。 - nmclean