如何将 Expression<Func<T, object>> 存储在 class 字段中?

How to store Expression<Func<T, object>> in a class field?

我想在 class 字段中存储一个表达式以备后用。

这是我正在尝试做的事情:

public class MyClass
{
    private Expression<Func<Type, object>> _expression;

    public void SetExpression<T>(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}

嘿,这是你想要达到的目标吗?

public class MyClass<T>
    {
        private Expression<Func<T, object>> _expression;

        public void SetExpression(Expression<Func<T, object>> expression)
        {
            _expression = expression;
        }
    }

要么创建泛型 class:

public class MyClass<T>
{
    private Expression<Func<T, object>> _expression;

    public void SetExpression(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}

或使用更多"abstract"表达式:

public class MyClass
{
    private Expression<Func<object, object>> _expression;

    public void SetExpression(Expression<Func<object, object>> expression)
    {
        _expression = expression;
    }
}

在这两种情况下,如果您使用输入类型 - 您可以通过访问表达式的输入参数来获取它:

 var inputTypesWhichIWantedToBeGeneric = _expression.Parameters.Select(x=> x.Type);

如@canton7 对原始问题的评论所述,您使用的是 <T>Type,但它们不是一回事。

一个可能的解决方案是:

public class MyClass<T>
{
    private Expression<Func<T, object>> _expression;

    public void SetExpression<T>(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}

使用此方法,您需要使用以下

创建 类
new MyClass<String>();

这将使 _expression 成为 Expression<Func<String, object>> 类型。

如果在创建对象时无法将 T 设置为特定类型,则需要将表达式直接传递到要使用它的方法中,或者将类型固定对于存储的表达式。