Die Where
Methode nur zurückkehrt, ob der Artikel sollte im Ergebnis oder nicht einbezogen werden. Die Funktion kann keine sinnvollen Informationen mehr liefern (sie könnte könnte eine lokale Variable erfassen und Sachen damit machen, aber das wäre schrecklich).
Wenn Sie den Index im Endergebnis haben möchten, müssen Sie eine Projektion erstellen, die diesen Index enthält. Wenn Sie den ursprünglichen Index im Endergebnis wollen, müssen Sie diese Projektion vor irgendwelchen Where
Klauseln setzen.
Hier ist ein Beispiel dafür:
using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
static void Main()
{
IEnumerable<char> letters = "aBCdEFghIJklMNopQRsTUvWyXZ";
var query = letters.Select((c, i) =>
new { Char=c, OriginalIndex=i })
.Where(x => char.IsLower(x.Char))
.Select((x, i) =>
new { x.Char,
x.OriginalIndex,
FinalIndex=i});
foreach (var result in query)
{
Console.WriteLine(result);
}
}
}
Ergebnisse:
{ Char = a, OriginalIndex = 0, FinalIndex = 0 }
{ Char = d, OriginalIndex = 3, FinalIndex = 1 }
{ Char = g, OriginalIndex = 6, FinalIndex = 2 }
{ Char = h, OriginalIndex = 7, FinalIndex = 3 }
{ Char = k, OriginalIndex = 10, FinalIndex = 4 }
{ Char = l, OriginalIndex = 11, FinalIndex = 5 }
{ Char = o, OriginalIndex = 14, FinalIndex = 6 }
{ Char = p, OriginalIndex = 15, FinalIndex = 7 }
{ Char = s, OriginalIndex = 18, FinalIndex = 8 }
{ Char = v, OriginalIndex = 21, FinalIndex = 9 }
{ Char = y, OriginalIndex = 23, FinalIndex = 10 }
Danke Jon, das hat alles aufgeklärt. Ich habe nur dafür gesorgt, dass ich etwas nicht mit der Where-Methode oder etwas anderem, was mit Let oder In tun hat, verpasst habe. Ich muss noch etwas lesen. –