gpt4 book ai didi

c# - 来自基类型的 Action 泛型

转载 作者:行者123 更新时间:2023-12-02 05:09:17 25 4
gpt4 key购买 nike

我想要一个 IEnumerable<Action<T>> subscriptions这是一组操作,每个操作都有不同的类型参数——我想将一个列表传递给服务构造函数以循环遍历这些操作并注册,但编译器会提示(不足为奇)。

有什么方法可以传递具有派生特定实现的基类型,并循环遍历列表?

class InternalBusService
{
private InternalBus bus;

public InternalBusService(IEnumerable<Action<T>> subscriptions)
{
foreach (var subscription in subscriptions)
{
this.bus.Subscribe<T>(subscription);
}
}
}

最佳答案

如果我理解你想传入IEnumerable<Action<T>>其中可枚举中每个操作的 T 都不是同一类型,这是不可能的。

也许你可以做类似下面这个“概念代码”的事情(意思是它只是向你展示我的想法,它不一定是解决方案)。

public interface IActionWrapper
{

bool AcceptsParameterType(Type t);
void PerformAction(object o);
}

public class ActionWrapper<T> : IActionWrapper
{
Action<T> yourAction {get;set;}

public bool AcceptsParameterType(Type t)
{
return t is T;
}

public void PerformAction(object o)
{
yourAction((T)o);
}

}

然后你可以通过IEnumerable<IActionWrapper>>进入你的函数,它不是通用类型的,并且通过它的实现支持多种类型。

关于c# - 来自基类型的 Action 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751684/

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