为什么我的bool RemoveAll方法只返回false

本文关键字:返回 false 方法 RemoveAll 我的 bool 为什么 | 更新日期: 2023-09-27 18:07:32

我必须为堆栈创建RemoveAll方法,该方法取出所有特定值,然后将其他值返回到原始堆栈。但是,我编写的方法只返回false。我的代码中的错误是什么?

这是我写的方法:

public bool RemoveAll(T item)
{
    Stack<T> OurStack = new Stack<T>();
    Stack<T> tempStack = new Stack<T>();
    bool itemRemove = false;
    OurListNode<T> pTmp = mTop;
    while (OurStack.Count > 0)
    {
        if (pTmp.Data.Equals(item))
        {
            itemRemove = true;
            pTmp = pTmp.Next;
        }
        else
        {
            tempStack.Push(pTmp.Data);
        }
    }
    while (tempStack.Count > 0)
    {
        pTmp = pTmp.Next;
        OurStack.Push(pTmp.Data);
    }
    return itemRemove;
}

下面是我用来测试这个方法的代码:

static void Main()
{
    OurStack<int> nums = new OurStack<int>();
    nums.Push(1);
    nums.Push(31);
    nums.Push(22);
    nums.Push(3);
    //nums.RemoveAll(31);
    Console.Write(nums.RemoveAll(1));
    Console.ReadKey();

为什么我的bool RemoveAll方法只返回false

问题是:

(OurStack。计数> 0)

(tempStack。计数> 0)

将始终为false,因为当函数开始时,您将用新对象初始化OurStack和tempStack,因此它将始终为空(除非您在堆栈构造函数代码中添加了某些内容):

Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();

所以这些列表总是空的。

可能行- if (pTmp.Data.Equals(item))永远不会返回true,因此永远不会切换bool值。

OurStack是变量名还是类型名?在RemoveAll方法中,它被用作变量名,在test方法中,它被用作类型。