继承List<T>后调用base.Sum()报错,扩展方法不可用?
问题解答
原因分析
Sum是System.Linq.Enumerable类中的扩展方法,扩展方法的调用逻辑是编译器将调用者实例作为第一个参数传递给静态扩展方法。但使用base.Sum()时,编译器会优先在List<int>的实例方法中查找Sum,找不到就直接报错——因为base关键字的调用只会绑定到基类的实例成员,不会触发扩展方法的查找逻辑。
解决方案
有两种可行的修复方式:
方式1:使用this替代base
你的Foo类继承了List<int>,本身实现了IEnumerable<int>接口,直接通过this调用扩展方法即可:
public int Total => this.Sum();
方式2:显式调用静态扩展方法
直接调用Enumerable.Sum静态方法,将base作为参数传入:
public int Total => Enumerable.Sum(base);
内容的提问来源于stack exchange,提问作者George Kerwood
相关产品推荐
相关产品推荐

