Por que não consigo chamar um método de extensão de uma classe base do tipo estendido?

Estou tentando adicionar a capacidade de procurar elementos em umList<KeyValuePair<string,int>> substituindo o indexador.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class MyList : List<KeyValuePair<string, int>>
    {
        public int this[string key]
        {
            get
            {
                return base.Single(item => item.Key == key).Value;
            }
        }
    }
}

F, ou por algum motivo, o compilador está lançando este erro:

'System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string,int>>'não contém uma definição para'Single'

Embora seja verdade queList<T> não possui esse método, ele deve estar visível porque é um método de extensão doSystem.Linq namespace (que está incluído). Obviamente usandothis.Single resolve o problema, mas por que o acesso viabase um erro?

A seção 7.6.8 da especificação C # diz

Quandobase.I ocorre em uma classe ou estrutura,I deve denotar um membro da classe base dessa classe ou estrutura.

O que pode impedir o acesso ao método de extensão viabase. No entanto, também diz

No momento da ligação, expressões de acesso à base do formuláriobase.I ebase[E] são avaliados exatamente como se fossem escritos((B)this).I e((B)this)[E], OndeB é a classe base da classe ou estrutura na qual a construção ocorre. Portanto,base.I ebase[E] Corresponde athis.I ethis[E], excetothis é visualizado como uma instância da classe base.

E sebase.I é como((B)this).I parece que métodos de extensão devem ser permitidos aqui.

Alguém pode explicar a aparente contradição nessas duas declarações?

questionAnswers(1)

yourAnswerToTheQuestion