通用查找功能作为参数

时间:2010-02-18 15:04:48

标签: c# generics

我正在尝试清除重复的代码。唯一的区别是像

这样的电话
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>();
}

2 个答案:

答案 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>