C# 如何指定<;的表达式;T>;在对象的表达式中?

C# 如何指定<;的表达式;T>;在对象的表达式中?,c#,.net,expression,expression-trees,assign,C#,.net,Expression,Expression Trees,Assign,这将是非常简单的 public class ModelMapNode { } public class ModelMapNode<TModelMap> : ModelMapNode { } public class ModelMapView { } public class ModelMapView<TModelMap> : ModelMapView where TModelMap : ModelMapNode { public ModelMapVi

这将是非常简单的

public class ModelMapNode { }

public class ModelMapNode<TModelMap> : ModelMapNode { }

public class ModelMapView { }

public class ModelMapView<TModelMap> : ModelMapView
    where TModelMap : ModelMapNode
{
    public ModelMapView()
    {
        this.RemovedProperties = new List<Expression<Func<TModelMap, object>>>();
    }

    public List<Expression<Func<TModelMap, object>>> RemovedProperties { get; private set; }

    public void RemoveNode<TNodeModelMap>(Expression<Func<TModelMap, TNodeModelMap>> expression)
        where TNodeModelMap : ModelMapNode
    {
        this.RemovedProperties.Add(expression);
    }
}
公共类ModelMapNode{}
公共类ModelMapNode:ModelMapNode{}
公共类ModelMapView{}
公共类ModelMapView:ModelMapView
其中TModelMap:ModelMapNode
{
公共模型映射视图()
{
this.RemovedProperties=新列表();
}
public List RemovedProperties{get;private set;}
public void RemoveNode(表达式)
其中TNodeModelMap:modelmappnode
{
this.RemovedProperties.Add(表达式);
}
}
理论上,可以在对象中指定任何泛型类型。但按照我的方式,作业是无效的

我无法在
表达式中分配
表达式


有可能吗?

我不确定您在这里想要实现什么(您没有解释为什么需要存储比通过API公开的类型弱的类型),但要回答您的问题,您可以执行以下操作:

Expression<Func<TModelMap, TNodeModelMap>> source = ...

var convertedBody = Expression.Convert(source.Body, typeof(object));    

var convertedExpression = Expression.Lambda<Func<TModelMap, object>>
                          (convertedBody, source.Parameters);

RemovedProperties.Add(convertedExpression);
表达式源=。。。
var convertedBody=Expression.Convert(source.Body,typeof(object));
var convertedExpression=Expression.Lambda
(convertedBody,source.Parameters);
添加(convertedExpression);

这行不通
Expression
是一个类,而不是一个接口,因此它不支持协方差。你能把RemotedProperties列成一个列表吗?@CoryNelson在我的例子中,不可能使用列表。这一个不完全是我的用例,它非常具体,在这里解释起来会很复杂。不管怎样,你的答案正是我需要的。非常感谢。