Der Titel deutet darauf hin, dass ich schon eine Idee habe, was vor sich geht, aber ich kann es nicht erklären. Ich habe versucht, eine List<string[]>
dynamisch von jeder "Spalte" zu bestellen, beginnend mit dem ersten und endend mit dem Minimum Length
aller Arrays.For-Loop und die verzögerte Ausführung von LINQ spielen nicht gut zusammen
Also in diesem Beispiel ist es 2
, weil die letzte string[]
nur zwei Elemente:
List<string[]> someValues = new List<string[]>();
someValues.Add(new[] { "c", "3", "b" });
someValues.Add(new[] { "a", "1", "d" });
someValues.Add(new[] { "d", "4", "a" });
someValues.Add(new[] { "b", "2" });
Jetzt habe ich versucht, alle von der ersten und der zweiten Säule zu bestellen. Ich kann es auf diese Weise statisch tun könnte:
someValues = someValues
.OrderBy(t => t[0])
.ThenBy(t => t[1])
.ToList();
Aber wenn ich weiß nicht, die Zahl der „Spalten“ i diese Schleife verwenden könnte (das ist, was ich dachte):
int minDim = someValues.Min(t => t.GetLength(0)); // 2
IOrderedEnumerable<string[]> orderedValues = someValues.OrderBy(t => t[0]);
for (int i = 1; i < minDim; i++)
{
orderedValues = orderedValues.ThenBy(t => t[i]);
}
someValues = orderedValues.ToList(); // IndexOutOfRangeException
Aber die funktioniert nicht, es schlägt mit einem IndexOutOfRangeException
in der letzten Zeile fehl. Der Debugger sagt mir, dass i
zu dieser Zeit 2
ist, so dass die for-Schleife-Bedingung ignoriert wird, i
ist bereits == minDim
.
Warum ist das so? Was ist der richtige Weg dafür?
_ "Die" für "-Schleife wird nicht geändert." _ Auch wenn ich immer noch .NET 4 benutze, ist dieses Problem auch auf Leute bezogen, die C# 5 bereits benutzen. –
Ja, das ist eines der Probleme mit der brechenden Änderung von foreach-Schleifen in C# 5. In gewisser Weise verhalten sie sich jetzt anders als for-Schleifen. – Dirk