我有一个字符串列表,我想对它们进行排序。
IEnumerable<String> strings = ...;
strings = strings.OrderBy(a => a);
我不明白的是那里的 lambda 表达式 a => a 的要点。一开始我以为我可以像这样同时取出一个属性和订单。
IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.OrderBy(a => a.StringProperty);
但这并不能编译。所以我必须这样走。
IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.Select(a
=> a.StringProperty).OrderBy(a => a);
那么,为什么我要在 OrderBy 命令中强制使用 lambda 表达式?!
最佳答案
lambda 表示“您想要订购的内容”。
如果你拿一组人,并按他们的生日排序,你仍然有一组人 - 而不是一组生日;即
IEnumerable<Person> people = ...;
IEnumerable<Person> sorted = people.OrderBy(a => a.DateOfBirth);
同样,订购一组 Something
由 StringProperty
仍然会产生一组 Something
小号:
IEnumerable<Something> somethings = ...;
IEnumerable<Something> sorted = somethings.OrderBy(a => a.StringProperty);
在某些(极少数)情况下,您的意思确实是“并按事物本身排序”。这通常仅适用于 IEnumerable<string>
之类的东西或 IEnumerable<int>
- 所以轻微的不便.OrderBy(x => x)
是微不足道的。如果它困扰你,你总是可以编写一个扩展方法来隐藏这个细节。
关于c# - OrderBy 中的 lambda 表达式有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166227/