2

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

4 に答える 4

2

こんな感じですか?

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

where T : SomeType制限したい任意のタイプにすることができますT

于 2013-04-01T20:55:44.137 に答える
1

私はあなたが何を意味するか知っていると思います。こちらをご覧ください。

http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx

于 2013-04-01T20:56:02.850 に答える
0

コンパイラ エラーを解決するには:

class InternalBusService<T>
{
    public InternalBusService(IEnumerable<Action<T>> subscriptions) { }
}

しかし、それが実際に達成しようとしているものかどうかはわかりません。

于 2013-04-01T20:56:25.523 に答える