我正在编写一些代码,其最终目的是让您使用属性表达式来设置属性的值,其语法类似于将变量作为 out 或 ref 参数传递。
类似于以下内容:
public static foo(()=>Object.property, value);
并且 Object.Property 将被赋予 value 的值。
我正在使用以下代码来获取属性的拥有对象:
public static object GetOwningObject<T>(this Expression<Func<T>> @this)
{
var memberExpression = @this.Body as MemberExpression;
if (memberExpression != null)
{
var fieldExpression = memberExpression.Expression as MemberExpression;
if (fieldExpression != null)
{
var constExpression = fieldExpression.Expression as ConstantExpression;
var field = fieldExpression.Member as FieldInfo;
if (constExpression != null) if (field != null) return field.GetValue(constExpression.Value);
}
}
return null;
}
因此,当用于 ()=>Object.Property 之类的属性表达式时,这将返回“Object”的实例。我对使用属性表达式有点陌生,似乎有很多不同的方法来完成事情,但我想扩展我到目前为止所拥有的,所以给定一个表达式,例如 ()=>Foo.Bar.Baz将给 Bar,而不是 Foo。我总是想要表达式中的最后一个包含对象。
有任何想法吗?提前致谢。