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

时间:2016-09-18 14:28:54

标签: c# stack boolean

我必须为堆栈创建一个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();

3 个答案:

答案 0 :(得分:2)

问题在于:

  

(OurStack.Count&gt; 0)

  

(tempStack.Count&gt; 0)

总是假的,因为当函数启动时你用新对象初始化OurStack和tempStack所以它总是为空(除非你在Stack构造函数代码中添加一些东西):

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

所以那些列表总是空的......

答案 1 :(得分:0)

也许行 - if(pTmp.Data.Equals(item))永远不会返回true,从而永远不会切换bool。在那里设一个断点来看。

答案 2 :(得分:0)

OurStack 是变量或类型的名称吗?在RemoveAll方法中,它用作变量名,在测试方法中,它用作类型。