Allgemein gesagt, nein. Aber Sie können Ihre eigenen schreiben:
public static class SomeExtension
{
public static IEnumerable<T> ReplaceDefaultByPreviousNonDefault(this IEnumerable<T> sequence)
{
T previous = default(T);
foreach(var val in squence)
{
if(val == default(t)) yield return previous;
previous = val;
yield return val;
}
}
}
Beispiel Nutzung:
var numbers = new int[] { 2, 5, 7, 8, 0, 0, 0 };
var result = numbers.ReplaceDefaultByPreviousNonDefault();
Wenn Sie wirklich wirklich wirklich beharren auf künstlich ein LinQ Verfahren einzuführen, können Sie die obige Schleife zu nehmen und es einfach bauen in eine select :
var numbers = new int[] { 2, 5, 7, 8, 0, 0, 0 };
int last = 0;
var result = numbers.Select(n => n == 0 ? last : last = n);
Kann es in der Mitte sein Nullen der Sequenz? –
Ja, Nullen können in der Mitte sein. –