C# 如何存储对基于传递给方法的表达式创建的泛型类型的引用?

C# 如何存储对基于传递给方法的表达式创建的泛型类型的引用?,c#,generics,expression,C#,Generics,Expression,我有以下方法,它根据定义表达式的返回类型返回类型为INamedProperty的泛型对象。我需要存储对此方法返回的对象的引用,以供将来处理。我应该将其存储为什么类型?Object可以吗?我以后如何将其转换回相应的INamedProperty?我是否还需要存储TReturn的类型 public class PropertyBuilder<T> : IPropertyBuilder<T> where T : class { public INamedProperty&

我有以下方法,它根据定义表达式的返回类型返回类型为
INamedProperty
的泛型对象。我需要存储对此方法返回的对象的引用,以供将来处理。我应该将其存储为什么类型?
Object
可以吗?我以后如何将其转换回相应的
INamedProperty
?我是否还需要存储
TReturn
的类型

public class PropertyBuilder<T> : IPropertyBuilder<T> where T : class {
    public INamedProperty<TReturn> Named<TReturn>(Expression<Func<T, TReturn>> property) {
        o = new NamedProperty<TReturn>();
        // how do I store o as an instance of the encapsulating class?
    }
}
公共类PropertyBuilder:IPropertyBuilder其中T:class{
已命名的公共属性(表达式属性){
o=新名称属性();
//如何将o存储为封装类的实例?
}
}
提前谢谢

我会尝试实现一个通用的、uhh,-generic
INamedProperty
,它可以实现您需要的操作:

interface INamedProperty
{
    // Informational
    Type ContainingType { get; }
    string Name { get; }
    Type ReturnType { get; }

    // Operations (for example)
    void CopyTo(object obj, INamedProperty property);
}
然后在通用名称属性中实现它们:

class NamedProperty<T> : INamedProperty { ... }
class NamedProperty:INamedProperty{…}

为什么不使用额外的操作参数而不是存储引用?您遇到了麻烦,因为TReturn在方法执行的上下文之外并不以具体形式存在;多考虑函数式编程,少考虑程序性编程

编辑:添加了代码示例

public INamedProperty<TReturn> Named<TReturn>(Expression<Func<T, TReturn>> property, Action<INamedProperty<TReturn>> action)
{
    var o = new NamedProperty<TReturn>();
    action.Invoke(o);
    return o;
}
已命名的公共INamedProperty(表达式属性、操作)
{
var o=新名称属性();
行动.援引(o);
返回o;
}

我假设
T
是封闭类的类型参数?是。抱歉没有澄清这一点。我将在我的问题中提供更多的上下文。在将来的处理中,您将如何使用此对象?如果对象引用足够,只需使用它即可。如果名为的泛型方法先按名调用,然后按名调用,会发生什么情况?请详细说明一下,好吗?您知道C#允许您只调用委托,您不需要使用
Invoke()
?例如:
动作(o)
ret=func(a)。这就是我最终要做的。谢谢你的意见!