问题  数组上的变量更改,如何防止这种情况?

利亚丁农

新成员
已加入
2020年1月5日
留言内容
1
编程经验
Beginner
我在数组中有变量存储时,当我更改变量的值时会在数组上更改它,如何防止这种情况?
所有变量都是全局变量
显示问题的视频: 2020-01-05 17-01-16.mp4

代码:
C#:
callerPieces = new List<string[]>();
for (int x = 0; x < 8; x++)
{
    for (int y = 0; y < 8; y++)
    {
        try
        {
            if (lastTurnBoard[x, y, 0].Substring(0, 1) == callerColor)
            {
                callerPiecesItem[0] = x.ToString();
                callerPiecesItem[1] = y.ToString();
                callerPiecesItem[2] = lastTurnBoard[x, y, 1];
                callerPiecesItem[3] = lastTurnBoard[x, y, 0];                         

                callerPieces.Add(callerPiecesItem);
            }
        }
        catch { }
    }
}
 
由主持人最后编辑:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,532
地点
弗吉尼亚州切萨皮克
编程经验
10+
The problem is that you are recycling the same instance of callerPiecesItem. Recall that in C#, most objects are 参考类型 而不是 值类型 . So each entry that you add into callerPieces is a reference to that single instance.

For a quick fix, try moving callerPieces = new List<string[]>(); into the body of your if statement so that you always create a new instance.

顺便说一句,您似乎并没有遵循正确的面向对象实践。不要做东西 线型。使用类而不是使用字符串列表来保存有关调用方的内容。也许像这样:
C#:
class CallerPiece
{
    public int X { get; set; }
    public int Y { get; set; }
    public CallerPiece PreviousTurnPlayer1 { get; set; }
    public CallerPiece PreviousTurnPlayer2 { get; set; }
}
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
请按照Skydivers回复中的说明,将您的代码发布在代码标签中。这有助于保持代码的格式,并有助于提高可读性。

Wouldn't it also be best to have an array of int and therefore not need to convert to string? callerPiecesItem is in the wrong position in your code. Utilising a decent class you could make better use of your code. Of course its a little hard to give you an example since you never gave the relevant code in your opening post. Ah well
 
最佳 底部