如何存储对基于传递给方法的表达式创建的泛型类型的引用
本文关键字:方法 表达式 创建 引用 泛型类型 于传递 何存储 存储 | 更新日期: 2023-09-27 17:58:42
我有以下方法,它根据定义的表达式的返回类型返回类型为INamedProperty<TReturn>
的泛型对象。我需要存储对该方法返回的对象的引用,以便将来处理。我应该将其存储为什么类型?Object
可以吗?稍后我将如何将其投射回适当的INamedProperty<TReturn>
?我是否还需要存储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?
}
}
提前感谢!
我会尝试实现一个通用的、uhh的、非-通用的INamedProperty
,它可以实现您需要的操作:
interface INamedProperty
{
// Informational
Type ContainingType { get; }
string Name { get; }
Type ReturnType { get; }
// Operations (for example)
void CopyTo(object obj, INamedProperty property);
}
然后在通用NamedProperty:中实现它们
class NamedProperty<T> : INamedProperty { ... }
为什么不采用额外的Action参数而不是存储引用?您遇到了麻烦,因为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;
}