在 C# LINQ 中反向查询列表

Reversely query the List in C# LINQ

提问人:user6703592 提问时间:8/23/2016 最后编辑:Gilad Greenuser6703592 更新时间:8/23/2016 访问量:2377

问:

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();
}

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

运算符 '.' 不能应用于 'void' 类型的 oprand。

甚至我创建了一个中间变量List<double> Reversevector = vector.Reverse().ToList();

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

C# LINQ

评论


答:

5赞 diiN__________ 8/23/2016 #1

像这样使用它,如 List<T>。Reverse() 不返回新列表

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

评论

2赞 Adil Mammadov 8/23/2016
请更正。正如你所说,它不会返回..Select(i => vector.Reverse().Select(j => j != 0? i / j : 0.0).ToList())List
0赞 diiN__________ 8/23/2016
@AdilMammadov 哦,没看到他用了两次。
9赞 Hari Prasad 8/23/2016 #2

问题是您使用的是 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(); 
0赞 Pratap Bhaskar 8/23/2016 #3

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

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