Хранить несколько контравариантных делегатов в словаре - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующее утверждение:

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

И я хочу сохранить это в словаре:

Dictionary<Type, CreateObjectDelegateAsync<Model.Object>>

Теперь я получаю ошибки, поскольку T не является ковариантным и онне может преобразовать это.У меня есть несколько делегатов с производным T, который должен находиться внутри этого словаря.

T должен быть инвариантным, чтобы его можно было использовать в качестве типа в параметрах.Любые идеи или обходные пути для этого?

1 Ответ

0 голосов
/ 05 марта 2019

Таким образом, решение было довольно простым: хотя я не могу сделать это с неизменностью здесь напрямую, я могу просто использовать вместо:

Dictionary<Type, Delegate>

.Я могу назначить любой делегат, независимо от типа.Затем, при получении делегата, мне просто нужно снова привести его к

CreateObjectDelegateAsync<T>

.

Примерно так (учитывая, что T - это существующий тип в словаре):

(CreateObjectDelegateAsync<T>)DelegateDictionary[typeof(T)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...