You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Stack存储棋盘坐标?Push方法参数报错求代码修正

解决Stack存储行列的报错问题

你遇到的错误原因很明确:.NET中的Stack.Push方法仅接受单个参数,没有能直接传入两个参数的重载;另外你代码里调用Stack.Push是错误的——Push是实例方法,得用你创建的myStack对象来调用,不能直接用类名调用。

要实现每次点击按钮时将行列存入Stack,需要把Row和Column打包成一个单独的对象再存入,下面是几种常用的实现方式:

方式1:使用ValueTuple(推荐,C# 7.0及以上版本支持)

这种方式最简洁,无需额外定义类:

// 声明指定类型的Stack,存储包含Row和Column的ValueTuple
Stack<(int Row, int Column)> myStack = new Stack<(int Row, int Column)>();

// 按钮点击事件中添加行列
private void Button_Click(object sender, EventArgs e)
{
    // 从文本框获取并转换行列值(假设文本框输入为数字)
    int row = int.Parse(txtRow.Text);
    int column = int.Parse(txtColumn.Text);
    
    myStack.Push((row, column));
}

方式2:自定义实体类

如果后续需要给行列添加更多属性或方法,适合自定义类:

// 定义存储位置信息的类
public class Position
{
    public int Row { get; set; }
    public int Column { get; set; }

    public Position(int row, int column)
    {
        Row = row;
        Column = column;
    }
}

// 声明存储Position对象的Stack
Stack<Position> myStack = new Stack<Position>();

// 按钮点击事件中添加行列
private void Button_Click(object sender, EventArgs e)
{
    int row = int.Parse(txtRow.Text);
    int column = int.Parse(txtColumn.Text);
    
    myStack.Push(new Position(row, column));
}

方式3:使用Tuple(兼容老版本C#)

如果你的项目基于C# 7.0之前的版本,可以用Tuple:

Stack<Tuple<int, int>> myStack = new Stack<Tuple<int, int>>();

// 按钮点击事件中添加行列
private void Button_Click(object sender, EventArgs e)
{
    int row = int.Parse(txtRow.Text);
    int column = int.Parse(txtColumn.Text);
    
    myStack.Push(Tuple.Create(row, column));
}

内容的提问来源于stack exchange,提问作者Intahim Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:18