如何将 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
设置为特定类型,则需要将表达式直接传递到要使用它的方法中,或者将类型固定对于存储的表达式。
我想在 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
设置为特定类型,则需要将表达式直接传递到要使用它的方法中,或者将类型固定对于存储的表达式。