在字典中存储多个逆变委托
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)]
我有以下声明:
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)]