diff --git a/docs/csharp/language-reference/operators/snippets/shared/CollectionExpressionExamples.cs b/docs/csharp/language-reference/operators/snippets/shared/CollectionExpressionExamples.cs index b86e8b163a77d..a96a8be5a77a9 100644 --- a/docs/csharp/language-reference/operators/snippets/shared/CollectionExpressionExamples.cs +++ b/docs/csharp/language-reference/operators/snippets/shared/CollectionExpressionExamples.cs @@ -9,19 +9,40 @@ // public class LineBuffer : IEnumerable { - private readonly char[] _buffer = new char[80]; + private readonly char[] _buffer; + private readonly int _count; public LineBuffer(ReadOnlySpan buffer) { - int number = (_buffer.Length < buffer.Length) ? _buffer.Length : buffer.Length; - for (int i = 0; i < number; i++) + _buffer = new char[buffer.Length]; + _count = buffer.Length; + for (int i = 0; i < _count; i++) { _buffer[i] = buffer[i]; } } - public IEnumerator GetEnumerator() => _buffer.AsEnumerable().GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => _buffer.GetEnumerator(); + public int Count => _count; + + public char this[int index] + { + get + { + if (index >= _count) + throw new IndexOutOfRangeException(); + return _buffer[index]; + } + } + + public IEnumerator GetEnumerator() + { + for (int i = 0; i < _count; i++) + { + yield return _buffer[i]; + } + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); // etc }