我正在尝试清除重复的代码。唯一的区别是像
这样的电话MyType x = Foo.LookupService<MyType>();
VS
MyType x = Bar.FindService<MyType>();
因此我们有两种类型T xxx<T>()
的方法,即在给定类参数T
的情况下返回T
实例的方法。我怎样才能将这些参数函数传递给尝试查找不同类型实例的方法,如
foo([magic generics stuff] resolve)
{
MyType x = resolve<MyType>();
MyOtherType y = resolve<MyOtherType>();
}
答案 0 :(得分:3)
在回答您更新的问题时,我不得不说看起来你需要做的就是接受一个实现接口的参数 - 可能是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
是类型参数时,必须在声明中建立,而不是在参数本身内。希望这是有道理的。
答案 1 :(得分:1)
[magic generics stuff]
= Func<TResult>