【问题标题】:How do I set a variable equal to the top of the stack? C#如何设置一个等于栈顶的变量? C#
【发布时间】:2020-05-01 21:34:40
【问题描述】:

我有一堆 int,我试图设置一个新的 int 等于堆栈顶部的值。我尝试将新的 int 设置为等于 Stack.Pop() 和 Stack.Peek(),但不断收到错误消息,指出无法将对象设置为 int。

public static int IntFound(ref Stack valStack)
{
   val = 0;
   if (valStack.Count > 0)
     int val = valStack.Pop();
   return val;
}

【问题讨论】:

  • 你可以做 ` val = Convert.ToInt32(valStack.Pop());` 。但是,有一个问题,为什么您将参数作为 ref 传递?
  • 您正在返回 int 值,但在您的函数中您提到了对象值。无法将int 传递给object
  • 另外两个想法:这里不需要 Stack 被引用(除非这是您的自定义 struct);和 - 如果堆栈为空,IMO 你应该 throw - 这是一个下溢
  • 没有回答你的问题,但你正在分配 val = 0;然后定义 int val = valStack.Pop(),这样还能编译吗?

标签: c#


【解决方案1】:

如果您使用的是非通用版本的 Stack,那么您可以执行以下操作。

public static int IntFound(Stack valStack)
{
    var val = 0;
    if (valStack.Count > 0)
        val = Convert.ToInt32(valStack.Peek());
    return val;
}

请注意,如果您不打算更改调用者的变量,则不需要使用 ref 传递堆栈。 Stack 的非泛型版本将值存储为对象。因此,您需要使用 Convert.ToInt32() 将对象转换为 int。

或者,您也可以使用 Stack 的通用版本 (Stack<int>)

public static int IntFound(Stack<int> valStack)
{
    var val = 0;
    if (valStack.Count > 0)
       val = valStack.Peek();
    return val;
}

【讨论】:

  • 可能是其他原因,我的机器没有编译,只是更新了问题中的代码窗口sn-p,使用后请查看并删除图片
  • 可能缺少 System.Collection 命名空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多