如何让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
相关产品推荐
相关产品推荐

