是否可以使用Linq和lambdas而不包含System.Linq命名空间?
前段时间,我一直在研究一个相当扭曲的项目 – 我只能在单个范围内编写代码,然后将其放入C#函数(由另一个模块)。
我只能使用之前声明的名称空间(我对它们没有影响)并且只能使用我工作的作用域中的变量。因此,我无法更改标题和包含的库。
当我想操作generics集合时出现问题 – 我既不能使用lambda表达式也不能使用LINQ – 我根本无法using System.Linq;
,因为我无法访问文件头。
我只需做一件简单的事情,没有LINQ或lambda就很容易管理。 但是,之后我想知道会发生什么,如果我不得不在IEnumerable上使用一些更复杂的操作。 从那以后,我的问题出现了:
是否可以在不更改文件头和添加新命名空间的情况下使用LINQ或lambdas?
假设我们有一个List _Numbers = new List();
。 让它充满一些数字。 现在我想从中选择所有偶数。
using System.Linq;
在标题中,解决方案很明显:
List _NewList = _Numbers.Where(n => n % 2 == 0).ToList();
要么
List _NewList = (from _Number in _Numbers where _Number % 2 == 0 select _Number).ToList();
但是如果不包含LINQ,我该如何实现呢? 我的第一个猜测是这样的:
List _NewList = System.Linq. // ??? What to add here?
我知道这个问题很奇特,走这条路是很不寻常的,但我只是很好奇而且我没有找到关于这个案例的信息。
如果没有using
指令,则.Where
, .Select
等方法将无法解析。 这意味着LINQ 语言部分将无法正常工作。 你必须长时间(和向后!)编码它:
List _NewList = System.Linq.Enumerable.ToList( System.Linq.Enumerable.Where(_Numbers, _Number => _Number % 2 == 0) );
请注意,对于包含组,订单,“let”,联接等的较长示例,这变得越来越复杂。除非您做的事情相当简单,否则建议您找到添加using
指令的方法。
但请注意,如果_Numbers
是List
,则可以使用(对于此单个示例):
List _NewList = _Numbers.FindAll(_Number => _Number % 2 == 0);
你可以写这样的代码:
System.Linq.Enumerable.Where(_NewList, n => n % 2 == 0)
但是,要小心:如果你的类实现了接口IQueryable
,上面的代码将完成工作,但速度会慢一些。
System.Linq.Queryable.Where(_NewList, n => n % 2 == 0)
因为IQueryable
是用其他DSL语言生成C#的方法,比如SQL。 在其他条件下,您的SQL服务器可以尽可能快地选择所需的元素。 但是如果你使用IEnumerable
或System.Linq.Enumerable
没有在服务器端进行优化,你将获得一个完整的项目列表,它们都将被加载到内存并在内存中进行过滤。
不太清楚为什么你不能访问文件“header”,但如果你不能在dirrective的文件开头输入的问题,你仍然可以使用该类型的完全限定名称,如:
System.Linq.Enumerable(...)
为了使这项工作,您自然需要包括正确的参考。
如果这不是您所要求的,请澄清。
上述就是C#学习教程:是否可以使用Linq和lambdas而不包含System.Linq命名空间?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027696.html