El Where
Methode nur gibt zurück, ob das Element in das Ergebnis aufgenommen werden soll oder nicht. Die Funktion kann keine weiteren Informationen auf sinnvolle Weise liefern (sie könnte eine lokale Variable erfassen und damit etwas anstellen, aber das wäre schrecklich).
Wenn Sie den Index im Endergebnis haben wollen, müssen Sie eine Projektion erstellen, die diesen Index enthält. Wenn Sie den Original Index im Endergebnis haben, müssen Sie diese Projektion vor jede Where
Klauseln.
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 }