C# 无法显示堆栈pop()中的最后一项

C# 无法显示堆栈pop()中的最后一项,c#,winforms,stack,C#,Winforms,Stack,我正在一个按钮上实现backword函数。单击会移动到堆栈中的上一个链接。问题是,如果堆栈pop()中有一个元素,则会出现堆栈为空的错误 private void Backward_Click(object sender, EventArgs e) { try { if (simpleStack.Count != 0) { simpleStack.Pop(); string open = simpleStack.Pop(); PopulateListView(open); complica

我正在一个按钮上实现backword函数。单击会移动到堆栈中的上一个链接。问题是,如果堆栈pop()中有一个元素,则会出现堆栈为空的错误

 private void Backward_Click(object sender, EventArgs e)
{
try
{
if (simpleStack.Count != 0)
{
simpleStack.Pop();
string open = simpleStack.Pop();

PopulateListView(open);

complicatedStack.Push(open);

}

else if (simpleStack.Count == 0)
{
Backward.Enabled = false;

}
当我点击一次以上时,它会工作。返回到上一个选中的项目。但不显示最后一个项目。我正在用simpleStack传递字符串。有人能告诉我我遗漏了什么吗?

看看你的代码:

simpleStack.Pop();
string open = simpleStack.Pop();
你弹出了两次,忽略了第一个结果。你为什么要那样做?我想您可以删除第一个
Pop
呼叫

还要注意,您的
else
子句不需要检查
simpleStack.Count==0
——必须检查,否则您就不会对
else
子句求值。(当然,除非你有多个线程在做一些事情——这不是一个好主意。)

看看你的代码:

simpleStack.Pop();
string open = simpleStack.Pop();
你弹出了两次,忽略了第一个结果。你为什么要那样做?我想您可以删除第一个
Pop
呼叫

还要注意,您的
else
子句不需要检查
simpleStack.Count==0
——必须检查,否则您就不会对
else
子句求值。(当然,除非你有多个线程在做一些事情——这不是一个好主意。)

试试这个-

private void Backward_Click(object sender, EventArgs e)
    {
        try
        {
            if (simpleStack.Count != 0)
            {
                //simpleStack.Pop();    // Remove this line
                string open = simpleStack.Pop();

                PopulateListView(open);

                complicatedStack.Push(open);

            }
            else if (simpleStack.Count == 0)
            {
                Backward.Enabled = false;
            }
        }
    }
试试这个-

private void Backward_Click(object sender, EventArgs e)
    {
        try
        {
            if (simpleStack.Count != 0)
            {
                //simpleStack.Pop();    // Remove this line
                string open = simpleStack.Pop();

                PopulateListView(open);

                complicatedStack.Push(open);

            }
            else if (simpleStack.Count == 0)
            {
                Backward.Enabled = false;
            }
        }
    }

不,它不是这样工作的…因为我当前所在的目录(路径)被重复,然后它移回上一个路径,然后不显示最后一个路径(从我开始的地方)它禁用按钮我正在使用该行,因为我想删除堆栈中最顶端的元素,然后将其扔到任何地方…simapleStack.pop执行该操作。但如果我删除它,它仍然会丢失作为堆栈基础的元素…(plz helpno它不以这种方式工作…与目录(路径)一样)i am on current重复,然后移回上一条路径,然后不显示最后一条路径(从我开始的位置)它会禁用按钮我正在使用该行,因为我想删除堆栈中最顶部的元素,然后将其扔到任何地方…simapleStack.pop执行该操作。但如果我删除它,它仍然会丢失堆栈底部的元素..:(plz helpplz请参见上述注释中的那一行..问题是,当我在堆栈中插入目录的路径时..我还需要显示堆栈的基本项..调用simplestack.pop时,首先只删除顶部的项,然后进入下一个语句..我需要对删除顶部元素设置某种条件恩…我guess@engineer41:您发布的代码中没有任何注释。有几个注释(有点混乱)语句之前和之后…但根本不清楚为什么要弹出两次。但如果只有一个元素,这将失败,原因很明显。在删除else条件和simplestack.pop后,它工作正常…但现在它再次显示当前路径,当我按下后退按钮时,它看起来非常愚蠢…showi再次删除同一个文件夹…如何删除顶部元素?请解释为什么堆栈中只有一个元素时它不起作用?请参见上面的注释该行..问题是,当我推送目录路径时,我会在堆栈中插入..我还需要显示堆栈的基本项..当第一次调用simplestack.pop时,会删除..和simplestack.pop只有在顶部的项,然后进入下一个语句…我需要对删除顶部元素设置某种条件…我guess@engineer41:您发布的代码中没有任何注释。有几个注释(有点混乱)语句之前和之后…但根本不清楚为什么要弹出两次。但如果只有一个元素,这将失败,原因很明显。在删除else条件和simplestack.pop后,它工作正常…但现在它再次显示当前路径,当我按下后退按钮时,它看起来非常愚蠢…showi再次删除同一文件夹…如何删除顶部元素?请解释为什么堆栈中只有一个元素时它不起作用?