【问题标题】:Can be avoided redundancy in OrderBy query on a list of simple value types? [duplicate]可以避免对简单值类型列表的 OrderBy 查询中的冗余吗? [复制]
【发布时间】:2016-10-12 15:33:19
【问题描述】:

我很想知道是否有某种方法不需要 lambda 运算符,甚至不需要参数来投影简单值类型列表的元素。以下列情况为例:

var unorderedList = new List<int>{ 3, 1, 2 };
var orderedList = unorderedList.OrderBy(x => x);

x =&gt; x 对我来说看起来有点多余,因为 int 没有任何成员可以排序,就像更复杂的对象一样。那么是否有任何其他方法(最好在 Linq 中)返回一个有序列表而没有额外的参数?

就像:var orderedList = unorderedList.Order();

【问题讨论】:

  • 没有,但你可以自己制作:)
  • "因为一个 int 没有任何成员" 好吧,你仍然可以做x =&gt; Math.Sin(x) 或类似的:)。
  • @AlexD 你有一个很好的观察,我仍然想知道这是否(应该)没有,为集合中的当前类型设置一个默认值。
  • @meJustAndrew 我认为应该,但事实并非如此:)。
  • 这个问题的更通用版本 - LINQ Identity function。 C#6 中仍然没有标识函数来使OrderBy 在这种情况下看起来更漂亮。

标签: c# linq


【解决方案1】:

如果你可以退出 LINQ 世界,因为你有一个 List&lt;int&gt;,你可以使用内置的 Sort 方法:

var unorderedList = new List<int> { 3, 1, 2 };
var orderedList = new List<int>(unorderedList);
orderedList.Sort();

【讨论】:

  • 而你刚刚修改了两个列表 :)
  • @meJustAndrew 不,只是新的。当您根据第一个列表的值创建第二个列表时,它会创建一个新列表,而不是第一个列表的引用。
  • 现在我看到构造函数调用,我很困惑,读起来只是一个简单的赋值,我的错!
【解决方案2】:

也许自己的 OrderBy 作为扩展方法?

public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> source) => source.OrderBy(x => x);

使用 C# 6.0 语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多