private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action <TextWriter, object> template, Action <TextWriter, object> ifEmpty) { context.Index = 0; var iter = sequence.GetEnumerator(); using (iter as IDisposable) { if (iter.MoveNext()) { var item = iter.Current; while (!context.Last) { context.Last = !iter.MoveNext(); context.First = (context.Index == 0); template(context.TextWriter, item); context.Index++; if (!context.Last) { item = iter.Current; } } } } if (context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }
//TODO: make this a little less dumb private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action <TextWriter, object> template, Action <TextWriter, object> ifEmpty) { context.Index = 0; context.First = sequence.Cast <object>().FirstOrDefault(); //TODO: don't enumerate multiple times context.Last = sequence.Cast <object>().LastOrDefault(); //TODO: don't enumerate multiple times foreach (object item in sequence) { template(context.TextWriter, item); context.Index++; } if (context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }
//TODO: make this a little less dumb private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action <TextWriter, object> template, Action <TextWriter, object> ifEmpty) { context.Index = 0; int length = (sequence is IList ? ((IList)sequence).Count : sequence.Cast <object>().Count()); foreach (object item in sequence) { context.First = (context.Index == 0); context.Last = (context.Index == length - 1); template(context.TextWriter, item); context.Index++; } if (context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }
private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action <TextWriter, object> template, Action <TextWriter, object> ifEmpty) { context.Index = 0; foreach (var enumeratorValue in new ExtendedEnumerable <object>(sequence)) { var item = enumeratorValue.Value; context.First = enumeratorValue.IsFirst; context.Last = enumeratorValue.IsLast; context.Index = enumeratorValue.Index; template(context.TextWriter, item); } if (context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }
//TODO: make this a little less dumb private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action<TextWriter, object> template, Action<TextWriter, object> ifEmpty) { context.Index = 0; int length = (sequence is IList ? ((IList)sequence).Count : sequence.Cast<object>().Count()); foreach (object item in sequence) { context.First = (context.Index == 0); context.Last = (context.Index == length - 1); template(context.TextWriter, item); context.Index++; } if (context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }
//TODO: make this a little less dumb private static void Iterate( IteratorBindingContext context, IEnumerable sequence, Action<TextWriter, object> template, Action<TextWriter, object> ifEmpty) { context.Index = 0; context.First = sequence.Cast<object>().FirstOrDefault(); //TODO: don't enumerate multiple times context.Last = sequence.Cast<object>().LastOrDefault(); //TODO: don't enumerate multiple times foreach(object item in sequence) { template(context.TextWriter, item); context.Index++; } if(context.Index == 0) { ifEmpty(context.TextWriter, context.Value); } }