Почему я не могу вызвать метод расширения из базового класса расширенного типа?

Я пытаюсь добавить возможность поиска элементов вList<KeyValuePair<string,int>> переопределив индексатор.

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

По какой-то причине компилятор выдает эту ошибку:

'System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string,int>>«не содержит определения для»Single».

Хотя это правда, чтоList<T> не имеет этот метод, он должен быть видимым, потому что это метод расширения изSystem.Linq пространство имен (которое входит в комплект). Очевидно, используяthis.Single решает проблему, но почему доступ черезbase ошибка?

Раздел 7.6.8 спецификации C # говорит

когдаbase.I происходит в классе или структуре,I должен обозначать член базового класса этого класса или структуры.

Что может показаться препятствующим доступу к методу расширения черезbase, Однако это также говорит

Во время привязки выражения базового доступа видаbase.I а такжеbase[E] оцениваются точно так же, как если бы они были написаны((B)this).I а также((B)this)[E], гдеB является базовым классом класса или структуры, в которой встречается конструкция. Таким образом,base.I а такжеbase[E] соответствоватьthis.I а такжеthis[E], Кромеthis рассматривается как экземпляр базового класса.

Еслиbase.I это как((B)this).I тогда кажется, что методы расширения должны быть разрешены здесь.

Может ли кто-нибудь объяснить очевидное противоречие в этих двух утверждениях?

Ответы на вопрос(1)

Ваш ответ на вопрос