我有一个需要用 Tab Control 实现的行为:
每次选择选项卡时,Stack.Push();
取消选择的选项卡。当用户关闭选定的选项卡时,转到返回的选项卡Stack.Pop();
,依此类推。当其他选项卡以外的其他选项卡时,简单地Stack.Pop();
。
我目前使用一个Stack
包含所有取消选择的选项卡。我想要的是能够删除堆栈中所有现有的 Pushed 选项卡副本,然后继续执行实际的Stack.Push()
. 知道堆栈不支持随机访问,描述的行为是否可行?
是的,有可能,您只需要删除然后重新添加堆栈中的所有项目。
public static void PushUnique<T>(this Stack<T> stack, T item
, IEqualityComparer<T> comparer = null)
{
comparer = comparer ?? EqualityComparer<T>.Default;
var otherStack = new Stack<T>();
while (stack.Any())
{
var next = stack.Pop();
if (!comparer.Equals(next, item))
otherStack.Push(next);
}
foreach (var next in otherStack)
stack.Push(next);
stack.Push(item);
}