在字典中存储多个逆变委托

Store multiple contravariant delegates in a dictionary

我有以下声明:

private delegate ITask<Id> CreateObjectDelegateAsync<in T>(T @object)
    where T : Model.Object;

我想将其存储在字典中:

Dictionary<Type, CreateObjectDelegateAsync<Model.Object>>

现在我遇到了错误,因为 T 不是协变的,他无法转换它。我有多个代表派生 T 需要在该字典中。

T 必须是不变的才能用作参数中的类型。对此有任何想法或解决方法吗?

所以解决方案非常简单:虽然我不能直接在此处使用不变性,但我可以使用 a:

Dictionary<Type, Delegate>

相反。无论泛型类型如何,我都可以将任何委托分配给它。然后稍后在获得委托时我只需要将其转换为

CreateObjectDelegateAsync<T>

再次。

像这样(假设 T 是字典中的现有类型):

(CreateObjectDelegateAsync<T>)DelegateDictionary[typeof(T)]