如何在C#中不使用using编写代码?解决ToList编译报错问题
解决CS1061:‘IEnumerable’不包含‘ToList’定义的问题
嘿,这个坑我踩过!你遇到的问题核心在于扩展方法的调用规则——ToList()是System.Linq.Enumerable类里的扩展方法,当你去掉using System.Linq;之后,编译器没办法自动识别到这个扩展方法,哪怕你已经写了System.Linq.Enumerable.Range也没用。
扩展方法本质是静态方法,只有当你通过using导入了它所在的命名空间时,编译器才允许你用“实例方法”的点语法来调用它。如果没导入命名空间,你就必须以静态方法的形式直接调用,而不是像之前那样在IEnumerable对象后面加.ToList()。
给你两个可行的单语句解决方案:
方案1:直接调用静态方法形式的ToList
把.ToList()替换成System.Linq.Enumerable.ToList(...),完整代码如下:
System.Linq.Enumerable.ToList(System.Linq.Enumerable.Range(0, 10)).ForEach(x => System.Diagnostics.Debug.WriteLine(x));
方案2:用List的构造函数替代ToList
因为List<T>有一个接收IEnumerable<T>的构造方法,你可以直接创建List实例,这样也能绕开扩展方法的问题:
new System.Collections.Generic.List<int>(System.Linq.Enumerable.Range(0, 10)).ForEach(x => System.Diagnostics.Debug.WriteLine(x));
两种方式都能解决编译报错的问题,选哪个看你个人习惯啦~
内容的提问来源于stack exchange,提问作者Bret Pehrson
相关产品推荐
相关产品推荐

