如何使用给定表达式访问属性

时间:2013-10-10 16:10:42

标签: c# lambda

我有以下抽象类

abstract public class FooActivator<T> where T : class
{
    protected static Expression<Func<Foo, Bar<T>>> ChosenProperty

    public void Activate(T Paramater)
    {
         using (var foo = new Foo)
         {
            foo.ChosenProperty.Method(Paramater) //Obviously wrong, How do you do this?
         }
    }
}

我的想法是我可以继承这个基类,为ChosenProperty分配一个新值,以告诉Activate哪个属性可以调用该方法。

Public Class MyClassFooActivator : FooActivator<MyClass>
{
    new static Expression<Func<Foo, Bar<MyClass>>> ChosenProperty = x => x.PropertyOfTypeBarMyClass
}

现在Activate(MyClass Paramater)已准备好被调用,它将使用

调用它
foo.PropertyOfTypeBarMyClass.Method(Paramater)

因为那是Expression中包含的Property。

显然我不能foo.ChosenProperty.Method(Paramater),因为ChosenPropertyExpression类型的变量,但是选择foo的任何属性的语法是什么已被Expression?

选中

1 个答案:

答案 0 :(得分:3)

我认为你正在寻找的东西可能是这样的:

abstract class FooActivator<T> where T : class
{
    protected abstract Func<Foo, Bar<T>> ChosenProperty { get; }

    public void Activate(T param)
    {
        var foo = new Foo();
        ChosenProperty(foo).Method(param);
    }
}

class MyClassFooActivator : FooActivator<MyClass>
{
    protected override Func<Foo, Bar<MyClass>> ChosenProperty
    {
        get { return x => x.SomeBarMyClassProperty; }
    }
}