public void SortByModel() { //Create generic stacks for each model type GenericStack<Droid> protocolStack = new GenericStack<Droid>(); GenericStack<Droid> utilityStack = new GenericStack<Droid>(); GenericStack<Droid> janitorStack = new GenericStack<Droid>(); GenericStack<Droid> astromechStack = new GenericStack<Droid>(); //Create new generic queue GenericQueue<Droid> droidQueue = new GenericQueue<Droid>(); foreach (Droid droid in droidArray) { if (droid != null) { switch (droid.GetModel()) { case "Protocol": protocolStack.Push(droid); break; case "Utility": utilityStack.Push(droid); break; case "Janitor": janitorStack.Push(droid); break; case "Astromech": astromechStack.Push(droid); break; default: break; } } } //Get droids from each stack and enqueue them while (astromechStack.IsNotEmpty()) { droidQueue.Enqueue(astromechStack.Pop()); } while (janitorStack.IsNotEmpty()) { droidQueue.Enqueue(janitorStack.Pop()); } while (utilityStack.IsNotEmpty()) { droidQueue.Enqueue(utilityStack.Pop()); } while (protocolStack.IsNotEmpty()) { droidQueue.Enqueue(protocolStack.Pop()); } int i = 0; while (droidQueue.IsNotEmpty()) { droidArray[i] = droidQueue.Dequeue(); i++; } }