2016-08-23 2 views
3
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(); 
} 

ich reversely Abfrage will die List aber es gibt einige Fehler in den .Reverse() und es wird gesagt, dass: ''Umgekehrt die Liste in C# LINQ

Operator kann nicht vom Typ 'void' angewendet werden.

Selbst erstelle ich eine Zwischengröße List<double> Reversevector = vector.Reverse().ToList();

Also, was ist der richtige Weg .Reverse() in linq zu benutzen?

Antwort

7

Problem ist, dass Sie List.Reverse() Methode nicht die Enumerable.Reverse()

Sie haben zwei Möglichkeiten verwenden, entweder als statische Methode oder explizites Casting zu nennen.

4

es so verwenden, wie 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(); 
+2

Bitte korrigieren '.Select (i => vector.Reverse() Wählen Sie (j => j = 0 i/j.!? 0,0) .ToList())'. Wie Sie sagten, gibt es 'List' nicht zurück. –

+0

@AdilMammadov Oh, sah es nicht, dass er es zweimal verwendet. –

0

Kopieren Sie die Liste in eine lokale Variable, oder erstellen Sie eine ähnliche Erweiterungsmethode, und ändern Sie den Code.

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