C#/ Linq:将映射函数应用于IEnumerable中的每个元素?

And*_*aus 94 c# linq

我一直在寻找一种方法,使用映射函数(以Linq兼容的方式)将IEnumerable的每个元素转换为其他元素,但我还没有找到任何东西.

对于(非常简单的)示例,它应该能够做类似的事情

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());
Run Code Online (Sandbox Code Playgroud)

但我还没有找到任何东西.我的意思是,编写一个完成它的扩展方法非常简单(基本上,它只需要将源枚举器包装到一个新类中,然后编写一些样板代码用于委托调用它),但我希望如此这是一个相当基本的操作,自己写它就像重新发明轮子一样 - 我无法摆脱可能存在我应该使用的内置方式的感觉,我只是太盲目看不到它.

那么...... Linq中有什么东西允许我做我上面描述的事情吗?

Geo*_*ett 151

您可以使用Select()扩展方法:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());
Run Code Online (Sandbox Code Playgroud)

或者在LINQ语法中:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };

var strings = from i in integers
              select i.ToString();
Run Code Online (Sandbox Code Playgroud)

  • 啊! 我知道必须有办法.有点旧的"森林/树木视觉遮挡问题",我猜:) (4认同)
  • 调用一个表单'linq查询语法'而另一个表单'linq方法语法'不正确吗? (4认同)
  • 实际上两者都是Linq语法类型,第一种称为方法语法,第二种称为查询语法。了解更多:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq (3认同)
  • 请注意,如果您的地图有副作用,您可能会遇到麻烦,因为Select()的主体在列举之前不一定要执行。这样做并不是一个好主意,但是在某些情况下,您可能需要添加`ToList()`以强制其评估整个列表。 (2认同)

Tim*_*oyd 25

您正在寻找Select哪些可用于转换\项目输入序列:

IEnumerable<string> strings = integers.Select(i => i.ToString());
Run Code Online (Sandbox Code Playgroud)

  • MS从未遇到过逃避强制重命名的术语.这是一种疾病.没有地图,过滤,折叠或缩小,但您可以选择,聚合...... (21认同)
  • 公平地说,它应该匹配SQL(后一组术语是常用术语) (7认同)
  • 真烦人。我正在尝试学习函数式编程...但是必须学习10年的LINQ术语。我需要翻译指南。我不知道谷歌翻译可以帮助... (2认同)