【问题标题】:Reversely query the List in C# LINQ在 C# LINQ 中反向查询列表
【发布时间】:2016-08-23 06:09:28
【问题描述】:
List<List<double>> Return(List<double> vector, int Z, int firstidx)
{            
    return vector.Reverse()
                 .Skip(firstidx)
                 .Take(Z)
                 .Select(i => vector.Reverse().Select(j => j != 0? i / j : 0.0).ToList())
                 .ToList();
}

我想reversely查询List,但.Reverse()有一些错误,它说:

运算符'.'不能应用“void”类型的操作数。

即使我创建了一个中间变量 List&lt;double&gt; Reversevector = vector.Reverse().ToList();

那么在linq 中使用.Reverse() 的正确方法是什么?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    问题是您使用的是List.Reverse() 方法而不是 Enumerable.Reverse()

    您有两种选择,将其称为静态方法或显式转换。

    Enumerable.Reverse(vector)
              .Skip(firstidx)
               .Take(Z)
               .Select(i => Enumerable.Reverse(vector).Select(j => j != 0? i / j : 0.0).ToList())
               .ToList(); 
    

    【讨论】:

      【解决方案2】:

      像这样使用它,就像List&lt;T&gt;.Reverse() doesn't return a new list:

      vector.Reverse();
      return vector.Skip(firstidx)
                   .Take(Z)
                   .Select(i => vector.Select(j => j != 0? i / j : 0.0).ToList())
                   .ToList();
      

      【讨论】:

      • 请更正.Select(i =&gt; vector.Reverse().Select(j =&gt; j != 0? i / j : 0.0).ToList())。正如你所说,它不会返回List
      • @AdilMammadov 哦,没看到他用了两次。
      【解决方案3】:

      将列表复制到一个局部变量,或者创建一个类似于下面的扩展方法并修改你的代码。

      public static IEnumerable<T> Reverse<T>(this IEnumerable<T> source)
      {
         var reversedList = source.ToList();
         reversedList.Reverse();
         return reversedList;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多