Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是LINQ;适用于所有;名为Select的方法?_Linq_Naming Conventions - Fatal编程技术网

为什么是LINQ;适用于所有;名为Select的方法?

为什么是LINQ;适用于所有;名为Select的方法?,linq,naming-conventions,Linq,Naming Conventions,当我阅读使用Select的代码时,我认为“在哪里选择所有”。 当我阅读使用Map的代码时,我会想到“从这个到那个”或“应用到所有”。 我不可能是唯一一个感到名字Select令人困惑的人 它与函数式语言的映射完全相同。之所以命名为Select,是因为它被设计为LINQ的一部分,LINQ使用类似SQL的关键字 from item in collection where item.Value == someValue select item.Name 翻译为: collection.Where(it

当我阅读使用
Select
的代码时,我认为“在哪里选择所有”。 当我阅读使用
Map
的代码时,我会想到“从这个到那个”或“应用到所有”。 我不可能是唯一一个感到名字
Select
令人困惑的人


它与函数式语言的映射完全相同。之所以命名为
Select
,是因为它被设计为LINQ的一部分,LINQ使用类似SQL的关键字

from item in collection
where item.Value == someValue
select item.Name
翻译为:

collection.Where(item => item.Value == someValue)
          .Select(item => item.Name)
如果将
Select
命名为
Map
,则会有点不一致;比如:

collection.Filter(item => item.Value == someValue)
          .Map(item => item.Name)

事实上,许多人使用LINQ时根本没有听说过函数式编程。对他们来说,LINQ是一种检索数据对象并轻松查询它们的方法(就像SQL查询一样)。对他们来说,
选择
其中
非常有意义。比
Map
Filter

更重要的是,选择排在最后的一个主要原因是使智能感知工作。通过将序列的源放在第一位(from语句),Intellisense可以正常工作

起初
Select
对我来说似乎也有点困惑,但这只是时间问题。Mehrdad告诉您选择
的一个很好的理由。除此之外,我觉得
Select
更好地传达了
Linq
的不变性。并不是说
Map
意味着它改变了原始结构,而是
Select
更清楚地说明了这一点。它告诉你没有接触原始列表,而只是从中选择以形成另一个列表


它与其他命名一起使用,如
Where
。当您调用
collection.Filter
时,它会让您知道您正在对该特定集合进行筛选,或者至少是第一次。最后,这都是一个熟悉的问题。虽然一开始我对
Linq
namings感到非常恼火,但现在我觉得微软团队的想法是最正确的。

完全有道理的。如果我真的那么在意的话,我可以在扩展方法中把
包装到Where
Select
。回答得好。实际上,我在没有LINQ的情况下使用了“Select”,但作为LINQ表达式,它更清晰。谢谢,回答得很好。断章取义没有任何意义,但这有助于解释它。这是一个值得指出的小区别:在LINQ中,映射(“选择”)的应用被推迟。例如,如果执行以下操作:
collection.Select(x=>x*x)
collection[0]//x*x未应用。
为了强制计算,可以强制创建一个新列表:
collection=collection.Select(x=>x*x).ToList()
这与问题有何关系?+1“
Select
说明得更清楚”。我们必须考虑SQL语法之外的问题。