具有AddUniqueItem的堆栈
本文关键字:堆栈 AddUniqueItem 具有 | 更新日期: 2023-09-27 18:20:57
我有一个需要用Tab控件实现的行为:
每次选择选项卡时,Stack.Push();
即为取消选择的选项卡。当用户关闭所选选项卡时,转到Stack.Pop();
返回的选项卡,依此类推。当选择的选项卡之外的其他选项卡时,只需Stack.Pop();
。
我目前使用的Stack
包含所有取消选择的选项卡。我想要的是功能,可以删除堆栈中Pushed选项卡的所有现有副本,然后转到实际的Stack.Push()
在知道Stack不支持随机访问的情况下,它是否可以实现所描述的行为?
是的,这是可能的,您只需要删除然后重新添加堆栈中的所有项。
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);
}