Warum kann ich keine Erweiterungsmethode von einer Basisklasse des erweiterten Typs aufrufen?

Ich versuche, die Fähigkeit zum Nachschlagen von Elementen in einem @ hinzuzufügeList<KeyValuePair<string,int>> durch Überschreiben des Indexers.

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 oder aus irgendeinem Grund gibt der Compiler diesen Fehler aus:

'System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string,int>> 'enthält keine Definition für'Single '.

Während es wahr ist, dassList<T> hat diese Methode nicht, sie sollte sichtbar sein, da es sich um eine Erweiterungsmethode aus dem @ handelSystem.Linq Namespace (der enthalten ist). Offensichtlich mitthis.Single behebt das Problem, aber warum ist der Zugriff überbase ein Fehler

Abschnitt 7.6.8 der C # -Spezifikation sagt

Wannbase.I kommt in einer Klasse oder Struktur vor,I muss ein Mitglied der Basisklasse dieser Klasse oder Struktur bezeichnen.

Was den Zugriff auf die Erweiterungsmethode über @ anscheinend ausschliebase. Es steht aber auch

Zur Bindungszeit Base-Access-Ausdrücke des Formularsbase.I undbase[E] werden genau so ausgewertet, als ob sie geschrieben wären((B)this).I und((B)this)[E], woB ist die Basisklasse der Klasse oder Struktur, in der das Konstrukt vorkommt. Also,base.I undbase[E] entsprichtthis.I undthis[E], außerthis wird als Instanz der Basisklasse angesehen.

Wennbase.I ist genau wie((B)this).I dann sollten hier anscheinend Erweiterungsmethoden erlaubt sein.

ann jemand den offensichtlichen Widerspruch in diesen beiden Aussagen erkläre

Antworten auf die Frage(2)

Ihre Antwort auf die Frage