[英]Generic lookup function as parameter
我正在尝试清理重复的代码。 唯一的区别就是电话
MyType x = Foo.LookupService<MyType>();
与
MyType x = Bar.FindService<MyType>();
所以我们有两种类型为T xxx<T>()
的方法,即一个给定类参数T
返回T
实例的方法。 我怎样才能将这些参数函数传递给尝试查找不同类型实例的方法,例如
foo([magic generics stuff] resolve)
{
MyType x = resolve<MyType>();
MyOtherType y = resolve<MyOtherType>();
}
在回答你更新的问题时,我不得不说你需要做的就是接受一个实现接口的参数 - 比如IResolver
,这可能会提供一个通用的Resolve<T>
方法:
public interface IResolver
{
T Resolve<T>();
}
void foo(IResolver resolver)
{
MyType x = resolver.Resolve<MyType>();
MyOtherType y = resolver.Resolve<MyOtherType>();
}
这样做的原因是你不能(据我所知)将泛型委托作为参数传递给非泛型方法。 我的意思是,你不能拥有这个:
void foo(Func<T> resolve)
{
}
当T
是类型参数时,它必须在声明中建立,而不是在参数本身内建立。 希望这是有道理的。
[magic generics stuff]
= Func<TResult>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.