Erreur du compilateur CS0831
Mise à jour : novembre 2007
Message d'erreur
Une arborescence d'expression ne peut pas contenir d'accès de base.
An expression tree may not contain a base access.
Un accès de base correspond à un appel de fonction, habituellement un appel de fonction virtuelle, passé en tant qu'appel de fonction non virtuelle dans la méthode de classe de base. Cela n'est pas autorisé dans l'arborescence d'expression même, mais vous pouvez appeler une méthode d'assistance dans la classe qui appelle la méthode de classe de base.
Pour corriger cette erreur
- Si vous devez accéder à une méthode de classe de base de cette façon, créez une méthode d'assistance qui appelle la classe de base et faites appeler la méthode d'assistance par l'arborescence d'expression. Cette technique est illustrée par le code suivant.
Exemple
L'exemple suivant génère l'erreur CS0831 :
// 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();
// }
}