gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:13:12 26 4
gpt4 key购买 nike

我有以下抽象类

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)

因为那是表达式中包含的属性。

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

最佳答案

我想你要找的可能是这样的:

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; }
}
}

关于c# - 如何使用给定表达式访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com