小编Bra*_*orf的帖子

从属性表达式获取属性的拥有对象

我正在编写一些代码,其最终目的是让您使用属性表达式来设置属性值,其语法类似于将变量作为out或ref参数传递。

类似于以下内容:

public static foo(()=>Object.property, value);
Run Code Online (Sandbox Code Playgroud)

并且将为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;
    }
Run Code Online (Sandbox Code Playgroud)

因此,当在()=> Object.Property之类的属性表达式上使用时,它将返回'Object'的实例。我对使用属性表达式有些陌生,似乎有许多不同的方法可以完成任务,但是我想扩展到目前为止的内容,以便给定一个表达式()=> Foo.Bar.Baz将给予律师,而不是Foo。我总是想要表达式中的最后一个包含对象。

有任何想法吗?提前致谢。

c# lambda

5
推荐指数
1
解决办法
906
查看次数

标签 统计

c# ×1

lambda ×1