Compilerfehler CS0831
Aktualisiert: November 2007
Fehlermeldung
Eine Ausdrucksbaumstruktur darf keinen Basiszugriff enthalten.
An expression tree may not contain a base access.
Basiszugriff bedeutet, dass ein Funktionsaufruf, bei dem es sich normalerweise um einen virtuellen Funktionsaufruf handeln würde, in einen nicht virtuellen Funktionsaufruf für die Basisklassenmethode umgewandelt wird. Dies ist in der Ausdrucksbaumstruktur selbst nicht zulässig, Sie können jedoch in Ihrer Klasse eine Hilfsmethode aufrufen, die wiederum die Basisklassenmethode aufruft.
So beheben Sie diesen Fehler
- Wenn Sie auf diese Weise auf eine Basisklassenmethode zugreifen müssen, erstellen Sie eine Hilfsmethode, die in der Basisklasse einen Aufruf durchführt, und sorgen dafür, dass die Ausdrucksbaumstruktur die Hilfsmethode aufruft. Diese Vorgehensweise wird im folgenden Code gezeigt.
Beispiel
Durch das folgende Beispiel wird der Fehler CS0831 ausgelöst:
// cs0831.cs
using System;
using System.Linq;
using System.Linq.Expressions;
public class A
{
public virtual int BaseMethod() { return 1; }
}
public class C : A
{
public override int BaseMethod() { return 2; }
public int Test(C c)
{
Expression<Func<int>> e = () => base.BaseMethod(); // CS0831
// Try the following line instead,
// along with the BaseAccessHelper method.
// Expression<Func<int>> e2 = () => BaseAccessHelper();
return 1;
}
// Uncomment to call from e2 expression above.
// int BaseAccessHelper()
// {
// return base.BaseMethod();
// }
}