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
,我想,尽管这不会增加太多)。如果类型匹配失败,也可能不希望什么都不做。谢谢你的评论,我没有意识到