Testando a igualdade entre dicionários em c #

Supondo que as chaves e os valores do dicionário tenham seus métodos iguais e hash implementados corretamente, qual é a maneira mais sucinta e eficiente de testar a igualdade de dois dicionários?

Nesse contexto, dois dicionários são considerados iguais se contiverem o mesmo conjunto de chaves (ordem não importante) e, para cada chave, eles concordam com o valor.

Aqui estão algumas maneiras que eu criei (provavelmente existem muitas outras):

public bool Compare1<TKey, TValue>(
    Dictionary<TKey, TValue> dic1, 
    Dictionary<TKey,TValue> dic2)
{
    return dic1.OrderBy(x => x.Key).
        SequenceEqual(dic2.OrderBy(x => x.Key));
}

public bool Compare2<TKey, TValue>(
    Dictionary<TKey, TValue> dic1, 
    Dictionary<TKey, TValue> dic2)
{
    return (dic1.Count == dic2.Count && 
        dic1.Intersect(dic2).Count().
        Equals(dic1.Count));
}

public bool Compare3<TKey, TValue>(
    Dictionary<TKey, TValue> dic1, 
    Dictionary<TKey, TValue> dic2)
{
    return (dic1.Intersect(dic2).Count().
        Equals(dic1.Union(dic2).Count()));
}

questionAnswers(9)

yourAnswerToTheQuestion