using System.Collections.Generic;
public static IEnumerable<T> ReplaceWhile<T>(IEnumerable<T> source, Func<T, bool> predicate, T subsitute)
var zerosLength = source.TakeWhile(predicate).Count();
return Enumerable.Repeat(subsitute, zerosLength).Concat(source.Skip(zerosLength));
public static void Main()
var l = new List<int?>{0,0,0,0,0,0,4,5,6,3,0,0,2,3};
Console.WriteLine(string.Join(",", ReplaceWhile(l, x => x == 0, (int?)null)));