C# 如何存储表达式<;Func<;T、 对象>&燃气轮机;在课堂上?

C# 如何存储表达式<;Func<;T、 对象>&燃气轮机;在课堂上?,c#,linq-expressions,C#,Linq Expressions,我想在类字段中存储一个表达式,以便以后使用 以下是我想做的: public class MyClass { private Expression<Func<Type, object>> _expression; public void SetExpression<T>(Expression<Func<T, object>> expression) { _expression = expressi

我想在类字段中存储一个表达式,以便以后使用

以下是我想做的:

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

    public void SetExpression<T>(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}
公共类MyClass
{
私人表达(private Expression);
公共void集合表达式(表达式)
{
_表达式=表达式;
}
}

嘿,这就是你想要实现的目标吗

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

        public void SetExpression(Expression<Func<T, object>> expression)
        {
            _expression = expression;
        }
    }
公共类MyClass
{
私人表达(private Expression);
公共void集合表达式(表达式)
{
_表达式=表达式;
}
}

嘿,这就是你想要实现的目标吗

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

        public void SetExpression(Expression<Func<T, object>> expression)
        {
            _expression = expression;
        }
    }
公共类MyClass
{
私人表达(private Expression);
公共void集合表达式(表达式)
{
_表达式=表达式;
}
}

创建泛型类:

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

    public void SetExpression(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;
    }
}

如@canton7对原始问题的评论所述,您使用的是
类型
,但它们不是同一件事

一个可能的解决方案是:

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

    public void SetExpression<T>(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}
公共类MyClass
{
私人表达(private Expression);
公共void集合表达式(表达式)
{
_表达式=表达式;
}
}
使用这种方法,您需要使用以下方法创建类

new MyClass<String>();
newmyclass();
这将使
\u表达式
的类型为
表达式


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

如@canton7对原始问题的注释所述,您使用的是
类型
,但它们不是同一件事

一个可能的解决方案是:

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

    public void SetExpression<T>(Expression<Func<T, object>> expression)
    {
        _expression = expression;
    }
}
公共类MyClass
{
私人表达(private Expression);
公共void集合表达式(表达式)
{
_表达式=表达式;
}
}
使用这种方法,您需要使用以下方法创建类

new MyClass<String>();
newmyclass();
这将使
\u表达式
的类型为
表达式



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

t
type
不同
Type
引用的实例,但
T
是泛型类型参数。您希望表达式以
T
为实例,还是以
类型
对象为实例作为输入?它们是非常不同的东西。您能提供错误消息吗?
T
需要在类级别定义。它当前仅存在于您的方法的范围内。我在字段表达式中使用了该类型,因为将存在未知类型所有
表达式
之间唯一统一的类型是
LamdbaExpression
表达式
对象
。您可以使用其中任何一种方法仅存储值,但这可能无法提供一种方便的方法来使用值。但是,您没有展示您打算如何使用它,这使得很难说出正确的答案。
t
Type
不同
Type
引用的实例,但
T
是泛型类型参数。您希望表达式以
T
为实例,还是以
类型
对象为实例作为输入?它们是非常不同的东西。您能提供错误消息吗?
T
需要在类级别定义。它当前仅存在于您的方法的范围内。我在字段表达式中使用了该类型,因为将存在未知类型所有
表达式
之间唯一统一的类型是
LamdbaExpression
表达式
对象
。您可以使用其中任何一种方法仅存储值,但这可能无法提供一种方便的方法来使用值。但是,您没有展示您打算如何使用它,这使得很难说正确的答案是什么。您提出的第二个解决方案将无法编译。无法将
表达式
转换为
表达式
。您必须一直到
Expression
(或者
LambdaExpression
,我想,尽管这不会增加太多)。如果类型匹配失败,也可能不希望什么都不做。谢谢你的评论,我不知道你不能,我猜下面答案中的抽象版本就是解决方案。或者你是说SomeOperation()?我同意这是不可取的,我的目标是给出一个可能的解决方案,这取决于您将记录问题或引发异常的应用程序。可以是任何应用程序,所以我给出了一个大概的想法。在我的情况下,我不能在类级别使用泛型类型。就像@Jeroenmoster说的,第二个代码没有compile@MarcosLommez如果不将类设置为泛型或锁定Func的类型,则更仔细地查看代码,您想要的实际上是不可能的。最好将表达式传递到使用它的方法中,并使该方法generic@TristanTrainer,我不想将泛型类型放在类级别..我将不得不做很多更改。。。但这将有一个更好的设计,因为我们提出的第二个解决方案不会编译。无法将
表达式
转换为
表达式
。您必须一直到
Expression
(或者
LambdaExpression
,我想,尽管这不会增加太多)。如果类型匹配失败,也可能不希望什么都不做。谢谢你的评论,我没有意识到