SORU
8 Mart 2014, CUMARTESİ


C hata#: "ifadesi bir ağaç tabanı erişim" içerebilir; - neden olmasın?

Expression<Func<bool>> kabul eden bir yöntem aradım.

İfadenin bir parçası olarak geçiyordum:

this.Bottom == base.lineView.Top

Derleyici bana bir hata verdi

ifade ağaç bir temel erişim içerebilir

Ben basit bir şekilde değişti

this.Bottom == this.lineView.Top

üye zaten korundu ve şimdi çalışıyor çünkü.

Ama bu hata gerçekten var ben: niye base Bu bir problem olur mu? Özellikle eğer this yerine çalışacak kullanıyorsanız ama sözdizimsel olarak aynı değişken erişilen alır)?

CEVAP
8 Mart 2014, CUMARTESİ


System.Linq.Expressions.Expression belgelerine baktığımızda, temsil eden bir ifade tarzı vardır sanmıyorum "temel üye erişim". Sizin durumunuzda this, öyle değil mi, diğer durumlarda olduğu gibi sadece: aynı şey demek olsa bile bunu unutma

class Test
{
    void Foo()
    {
        Expression<Func<string>> baseString = () => base.ToString();
    }

    public override string ToString()
    {
        return "overridden value";
    }
}

Burada Object.ToString() sanal olmayan bir çağrı (this) temsil edecek. Bir ifade ağaç, hata dolayısıyla temsil edilecek bir şey yok.

Şimdi bu bariz soru yol açarnedenifade ağaçları - eğer bunu görebiliyorum ancak o kısmı... cevap veremem korkarım olmayan sanal bir temel üye çağırma gösterimi yokolabilirbu ifade programlı olarak oluşturmak, bu normal polimorfizmi atlamak için izin verecekdışarıdansadece içerden sınıf normal durumda () yerine. Bunun nedeni olabilir. (Kuşkusuz başka yollar arama yöntemleri olmayan neredeyse, ama o başka mesele, ve bana kalırsa orada durumlarda nerede ifade ağaç "güvenilir" ama başka bir kod değil.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010
  • NightShader1

    NightShader1

    25 Temmuz 2006