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

I want to reversely query the List but there is some error in the .Reverse() and it said that:

Operator '.' cannot be applied oprand of type 'void'`.

Even I create a intermediate variable List<double> Reversevector = vector.Reverse().ToList();

So what the correct way to use .Reverse() in linq?

Gilad Green
  • 36,708
  • 7
  • 61
  • 95
user6703592
  • 1,004
  • 1
  • 12
  • 27

3 Answers3

9

Problem is you are using List.Reverse() method not the Enumerable.Reverse()

you have two options, either to call it as static method or explicit casting.

Enumerable.Reverse(vector)
          .Skip(firstidx)
           .Take(Z)
           .Select(i => Enumerable.Reverse(vector).Select(j => j != 0? i / j : 0.0).ToList())
           .ToList(); 
Hari Prasad
  • 16,716
  • 4
  • 21
  • 35
5

Use it like this, as List<T>.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();
Community
  • 1
  • 1
diiN__________
  • 7,393
  • 6
  • 42
  • 69
0

Copy the list to a local variable, or create an extension method similar to one below and modify your code.

public static IEnumerable<T> Reverse<T>(this IEnumerable<T> source)
{
   var reversedList = source.ToList();
   reversedList.Reverse();
   return reversedList;
}
Pratap Bhaskar
  • 408
  • 3
  • 11