public char FindNext(char after, bool ignoreCase)
{
var index = _characters.IndexOf(after);
for (var c = index + 1; c <= _characters.Count - 1; c++)
{
if (!_characters[c].ToString(CultureInfo.InvariantCulture)
.Equals(after.ToString(CultureInfo.InvariantCulture),
ignoreCase
? StringComparison.InvariantCultureIgnoreCase
: StringComparison.InvariantCulture))
return _characters[c];
}
if (ignoreCase && char.IsLetter(after))
{
for (var c = 0; c < index; c++)
{
if (!char.IsLetter(_characters[c]))
return _characters[c];
if (char.IsLower(after) && char.IsLower(_characters[c]))
return _characters[c];
if (char.IsUpper(after) && char.IsUpper(_characters[c]))
return _characters[c];
}
}
return _characters[0];
}