C# 中的错误:“表达式树可能不包含基本访问” - 为什么不呢?

2024-05-07

我正在调用一个接受的方法Expression<Func<bool>>.

作为我传递的表达式的一部分:

this.Bottom == base.lineView.Top

编译器给了我一个错误

表达式树可能不包含基本访问

所以我简单地将其更改为

this.Bottom == this.lineView.Top

因为该成员无论如何都受到保护,现在它可以工作了。

但这个错误确实让我困惑:到底为什么会这样base有问题吗?特别是如果使用this相反会起作用,但语法上是相同的结果(访问相同的变量)?


看着System.Linq.Expressions.Expression http://msdn.microsoft.com/en-us/library/system.linq.expressions.expression%28v=vs.110%29.aspx文档中,我认为没有表示“基本成员访问”的表达式类型。不要忘记,即使在你的情况下它的含义与只是相同this,在其他情况下它不会:

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

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

这里代表一个非虚拟调用Object.ToString() (for this)。我看不到它如何在表达式树中表示,因此出现错误。

现在这就引出了一个明显的问题why表达式树中没有非虚拟基成员调用的表示 - 恐怕我无法回答这部分......尽管我可以看到如果你could以编程方式构建该表达式,这将允许您绕过正常的多态性从外部而不仅仅是从类本身内部(这是正常情况)。也许就是这个原因。 (诚​​然,还有其他非虚拟调用方法的方法,但这是另一回事,我敢说在某些情况下表达式树是“可信的”,但其他代码不是。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的错误:“表达式树可能不包含基本访问” - 为什么不呢? 的相关文章

随机推荐