Это не самый производительный, но он должен работать.Вы даже можете сделать это методом расширения.
public static T GetNext<T>(IList<T> collection, T value )
{
int nextIndex = collection.IndexOf(value) + 1;
if (nextIndex < collection.Count)
{
return collection[nextIndex];
}
else
{
return value; //Or throw an exception
}
}
И вы используете его так:
var list = new List<string> {"A", "B", "C", "D"};
string current = "B";
string next = GetNext(list, current);
Console.WriteLine(next); //Prints C