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,非-genericINamedProperty
,它可以实现您需要的操作:
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)代码>。这就是我最终要做的。谢谢你的意见!