为什么我不能使用base.Select在List <string>的子类中使用Linq Select?

时间:2017-07-10 17:37:32

标签: c# .net linq

如果我实例化List<string>的子类,那么我可以使用Linq的Select方法。

using System.Linq;

namespace LinqProblem
{
    class Program
    {
        static void Main(string[] args)
        {
            BetterList list = new BetterList();
            list.Select(l => l.ToString() == "abc");  // no compile error
        }
    }
}

但是如果我尝试在子类的定义中使用Select ...

using System.Collections.Generic;
using System.Linq;

namespace LinqProblem
{
    class BetterList : List<string>
    {
        public List<string> Stuff
        {
            get
            {
                base.Select(l => l.ToString() == "abc");  // compile error
            }
        }
    }
}

错误:

  

'List<string>'不包含'选择'的定义。

为什么会出现这种情况,是否有解决办法?

1 个答案:

答案 0 :(得分:11)

Select()是一种扩展方法。 base关键字专门用于非虚拟调用基类方法,不支持扩展方法。

将其更改为this.Select,它会正常工作。