I propose to refactor Stack ArrayBasedStack. I was reading some C# algorithms and not understand the reason for use a iteration in line 48 of ArrayBasedStack.cs . I believe this syntax is more readable:
public ArrayBasedStack(T[] items)
{
stack = items;
top = items.Length - 1;
}
If this refactoring makes sense, I can make this change :)