Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的bool RemoveAll方法只返回false?_C#_Stack_Boolean - Fatal编程技术网

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

C# 为什么我的bool RemoveAll方法只返回false?,c#,stack,boolean,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

我必须为堆栈创建一个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;
}
public bool RemoveAll(T项)
{
Stack-OurStack=新堆栈();
Stack tempStack=新堆栈();
bool itemrove=false;
OurListNode pTmp=mTop;
而(OurStack.Count>0)
{
if(pTmp.数据等于(项目))
{
itemRemove=true;
pTmp=pTmp.Next;
}
其他的
{
tempStack.Push(pTmp.Data);
}
}
而(tempStack.Count>0)
{
pTmp=pTmp.Next;
OurStack.Push(pTmp.Data);
}
返回项目删除;
}
以下是我为测试该方法而编写的主要内容:

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();
static void Main()
{
OurStack nums=新的OurStack();
推(1);
推(31);
推(22);
推(3);
//nums.RemoveAll(31);
Console.Write(nums.RemoveAll(1));
Console.ReadKey();
可能行-if(pTmp.Data.Equals(item))永远不会返回true,因此永远不会切换布尔值。在那里放置断点以查看。

问题在于:

(OurStack.Count>0)

(tempStack.Count>0)

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

Stack-OurStack=newstack();
Stack tempStack=新堆栈();

所以这些列表总是空的…

我们的堆栈是变量名还是类型名?在RemoveAll方法中,它被用作变量名,在测试方法中,它被用作类型。

这很奇怪;当我调试时,它转到第一个while语句,然后跳到下一个while语句,而不遍历thr通过任何其他代码。我不知道它为什么会这样做…什么是
OurListNode pTmp=mTop;
,两个
while
循环的中断条件是什么。您似乎只是在推数据离子堆栈,它会弹出堆栈并清空堆栈。两个while循环的中断条件应该是清空堆栈ack和tempStack。但是,该方法根本没有识别出MajkeloDev指出的任何数据正在放入。我使用pTmp作为指向堆栈顶部的临时指针。因此,当我编写pTmp=pTmp时。下一步--我尝试将其从其框架中弹出,分析其内容,然后将其完全从堆栈中删除或将其放入tempStack,但这并没有发生,因为我从来没有真正使它通过while循环线。当使用该方法时,我在添加到堆栈后调用它,并且第一个while语句不应该将数据推送到tempStack中吗?那么为什么列表仍然是空的呢?当我调试它时,它首先会经过添加到列表的过程,所以我知道我们的堆栈包含数据。但你是对的,它将它们标识为空,因为它先到第一个while语句,然后到第二个while语句,然后返回ItemRemove的原始值,该值为false。你知道为什么吗?@Stephanie你将我的答案标记为正确。你现在明白了吗,或者你想让我给你一些解释吗?我同意我会在调试程序时看到你是对的--我只是不知道如何修复它--所以如果你有时间再解释一下,我将不胜感激!
Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();