所以,我使用统一,我有这个字符串,包含一个井字棋盘的当前状态。它看起来像是:
XOX
ONX
OXX
" N"是一个中立的空间。
问题是我要替换其中一个" N"使用" X"或者" O"。 我尝试使用:
board[n] = "X";
但是我得到了
"无法分配属性或索引器,它是只读的#34;
所以我试图找到改变其中一个" N"的方法。这是我的代码
if (manager.turn == 1 && !isUsed)
{
xSprite.enabled = true;
manager.board[int.Parse(gameObject.name)-1] = 'X';
manager.GameEndingDraw();
isUsed = true;
manager.turn = 2;
}
else if (manager.turn == 2 && !isUsed)
{
oSprite.enabled = true;
manager.board[int.Parse(gameObject.name)-1] = 'O';
manager.GameEndingDraw();
isUsed = true;
manager.turn = 1;
}
答案 0 :(得分:4)
Tic-Tac-Toe板不是一个字符串,它是一个3×3网格的标记,如字符。您应该将其表示为数组,而不是字符串:
var board = new char[3, 3];
for (int i = 0; i < board.GetLength(0); i++)
for (int j = 0; j < board.GetLength(1); j++)
board[i, j] = 'N';
然后您可以按坐标设置每个标记:
board[0, 0] = 'X';
答案 1 :(得分:1)
您可以使用以下四种方法:
<强> ToCharArray 强>
var array = board.ToCharArray();
array[indexOfNew] = newChar;
board = new string(array);
<强>的StringBuilder 强>
var sb = new StringBuilder(board);
sb[indexOfNew] = newChar;
board = sb.ToString();
String.Remove和String.Insert
board = board.Remove(indexOfNew, 1)
.Insert(indexOfNew, newChar.ToString());
SubString和String Interpolation
board = $"{board.Substring(0, indexOfNew)}{newChar}{board.Substring(indexOfNew+1, board.Length-indexOfNew-1)}";
假设board
包含原始字符串,newChar
包含新放置的&#34;片段&#34;并且indexOfNew
包含您需要替换的字符串中的索引。
您当然可以在扩展方法中包装您选择的选项:
public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
var newString = // Insert your choice of replacement from above here
return newString;
}