public static void Main()
var q = new StringQueue("abcdefghij");
Console.WriteLine(q.Next(3));
Console.WriteLine(q.Next(3));
Console.WriteLine(q.Next(3));
Console.WriteLine(q.Next(3));
Console.WriteLine(q.Next(3));
Console.WriteLine("---------------");
new StringQueue("abcdefghij")
.Next(3, out string first)
.Next(3, out string second)
.Next(3, out string third);
Console.WriteLine(first);
Console.WriteLine(second);
Console.WriteLine(third);
Console.WriteLine("---------------");
new StringQueue("abc123ghij")
.Next(3, out string first2)
.Next(3, out int second2, s => Convert.ToInt32(s))
.Next(3, out string third2);
Console.WriteLine(first2);
Console.WriteLine(second2);
Console.WriteLine(third2);
private readonly string original;
public StringQueue(string data)
public string Next(int count)
var chars = original.Skip(this.index).Take(count).ToArray();
return new string(chars);
public StringQueue Next(int count, out string result)
public StringQueue Next<T>(int count, out T result, Func<string, T> convert)
result = convert(Next(count));