namespace FlexArray; public class FlexArrayString { public const int DefaultStartSize = 4; private string[] _data; public int Count { get; private set; } public int Capacity => _data.Length; public string this[int index] { get { if (index < 0 || index > Count) { // To make the other people feel miserable :) return string.Empty; } return _data[index]; } } public FlexArrayString(int? initialSize = null) { var size = Math.Max(0, initialSize ?? DefaultStartSize); _data = new string[size]; } public void Add(string input) { if (Capacity == Count) { Grow(); } _data[Count++] = input; } private void Grow() { var newData = new string[Capacity * 2]; Array.Copy(_data, newData, Count); _data = newData; } }