CS0831 de erro do compilador

Mensagem de erro

Uma árvore de expressão não pode conter um acesso de base.

Um meio de acesso básico para tornar uma função de telefonar que normalmente seria uma telefonar de função virtual sistema autônomo uma função não-virtual chamar o método da classe base.Isso não é permitido na árvore de expressão propriamente dito, mas você pode chamar um método auxiliar em sua classe que invoca o método da classe base.

Para corrigir este erro

  • Se você precisar acessar um método da classe base dessa maneira, criar um método auxiliar que s telefonar na classe base e ter a árvore de expressão telefonar o método auxiliar.Essa técnica é mostrada no código a seguir.

Exemplo

O exemplo a seguir gera 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();
    // }
    
}