0

我有一个需要用 Tab Control 实现的行为:

每次选择选项卡时,Stack.Push();取消选择的选项卡。当用户关闭选定的选项卡时,转到返回的选项卡Stack.Pop();,依此类推。当其他选项卡以外的其他选项卡时,简单地Stack.Pop();

我目前使用一个Stack包含所有取消选择的选项卡。我想要的是能够删除堆栈中所有现有的 Pushed 选项卡副本,然后继续执行实际的Stack.Push(). 知道堆栈不支持随机访问,描述的行为是否可行?

4

1 回答 1

1

是的,有可能,您只需要删除然后重新添加堆栈中的所有项目。

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);
}
于 2013-07-03T17:48:23.973 回答