Ogólne programy obsługi C #, co nie rozumiem?

Nie wiem, dlaczego to nie działa. Nie podoba mi się dodanie TResponse do out i handlerMap, mimo że TResponse jest odpowiedzią IResponse? Sądzę, że muszę nie rozumieć czegoś na temat generyków, a może bardziej prawdopodobne, o C #. Dlaczego to nie działa i czy jest lepszy sposób na osiągnięcie tego, co próbuję tutaj zrobić?

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

Otrzymuję te błędy podczas kompilacji:

Błąd 1 Najlepsza metoda przeciążenia pasuje do 'System.Collections.Generic.Dictionary >>. TryGe‌Value (System.Type, out System.Collections.Generic.List>)' ma kilka niepoprawnych argumentów C: ... NetworkManager. cs 39 13 Assembly‌ -CSharp-vs

Błąd 2 Argument 2: nie można przekonwertować z 'out System.Collections.Generic.List>' na '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>>?

questionAnswers(3)

yourAnswerToTheQuestion