gpt4 book ai didi

c# - 通用查找函数作为参数

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:31 25 4
gpt4 key购买 nike

我正在尝试清理重复代码。唯一的区别是这样的调用

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>();
}

最佳答案

在回答您更新的问题时,我不得不说看起来您需要做的是接受一个实现接口(interface)的参数——类似于 IResolver。 ,也许——这又提供了一个通用的 Resolve<T>方法:

public interface IResolver
{
T Resolve<T>();
}

void foo(IResolver resolver)
{
MyType x = resolver.Resolve<MyType>();
MyOtherType y = resolver.Resolve<MyOtherType>();
}

这样做的原因是您不能(据我所知)将通用委托(delegate)作为参数传递给非通用方法。我的意思是,你不能拥有这个:

void foo(Func<T> resolve)
{
}

T是一个类型参数,它必须在声明中建立,而不是在参数本身中。希望这是有道理的。

关于c# - 通用查找函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com