C # универсальные обработчики, что я неправильно понимаю?
Я не уверен, почему это не работает. Он не любит TResponse для добавления out и handlerMap, хотя TResponse является IResponse? Я полагаю, что я неправильно понимаю что-то о дженериках или, что более вероятно, о C #. Почему это не работает, и есть ли лучший способ выполнить то, что я пытаюсь сделать здесь?
private static Dictionary<Type, List<IResponseHandler<IResponse>>> _handlerMap;
public static void AddResponseHandler<TResponse>(IResponseHandler<TResponse> handler) where TResponse : IResponse
{
List<IResponseHandler<TResponse>> handlers;
_handlerMap.TryGetValue(typeof (TResponse), out handlers);
if (handlers == null)
{
handlers = new List<IResponseHandler<TResponse>>();
_handlerMap.Add(typeof (TResponse), handlers);
}
handlers.Add(handler);
}
public interface IResponseHandler<TResponse> where TResponse : IResponse
{
void Handle(TResponse response);
}
Я получаю эти ошибки во время компиляции:
Ошибка 1 Наилучшее совпадение перегруженного метода для 'System.Collections.Generic.Dictionary >>. TryGe tValue (System.Type, out System.Collections.Generic.List>)' имеет недопустимые аргументы C: ... \ NetworkManager. cs 39 13 Assembly -CSharp-vs
Ошибка 2 Аргумент 2: невозможно преобразовать 'out System.Collections.Generic.List>' в 'out System.Collections.Generic.List>' C: ... \ NetworkManager.cs 39 61 Assembly-CSharp-vs
If I change TResponse to IResponse within the method, everything above
handlers.Add(handler) compiles fine. I don't understand why I can't add a handler of
<TResponse : IResponse> to a List<IResponseHandler<IReponse>>?