Cómo distinguir MethodBase en genéricos

Tengo un caché basado en

Dictionary<MethodBase, string>

La clave se representa desde MethodBase.GetCurrentMethod. Todo funcionó bien hasta que los métodos fueron declarados explícitamente. Pero un día aparece que:

Method1<T>(string value)

Hace la misma entrada en el Diccionario cuando T obtiene tipos absolutamente diferentes.

Así que mi pregunta es sobre una mejor manera de almacenar el valor en caché para métodos genéricos. (Por supuesto, puedo proporcionar un envoltorio que proporcione GetCache e igualdad con los tipos genéricos encontrados, pero de esta manera no parece elegante).

Actualizar Aquí lo que quiero exactamente:

static Dictionary<MethodBase, string> cache = new Dictionary<MethodBase, string>();
static void Method1<T>(T g) 
{
    MethodBase m1 = MethodBase.GetCurrentMethod();
    cache[m1] = "m1:" + typeof(T);
}
public static void Main(string[] args)
{
    Method1("qwe");
    Method1<Stream>(null);
    Console.WriteLine("===Here MUST be exactly 2 entry, but only 1 appears==");
    foreach(KeyValuePair<MethodBase, string> kv in cache)
        Console.WriteLine("{0}--{1}", kv.Key, kv.Value);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta