繁体   English   中英

通用查找功能作为参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM