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

  • Bach Vlogs

    Bach Vlogs

    18 HAZİRAN 2011
  • boburnham

    boburnham

    11 Temmuz 2006
  • TechSmartt

    TechSmartt

    29 Aralık 2010