c# - 初始化填充有相同元素的数组

标签 c# arrays

var board = Enumerable.Repeat(Enumerable.Repeat('.', 3).ToArray(), 3).ToArray();
board[0][0] = 'Q';

我在这里尝试创建由相同元素填充的数组 (3*3) 组成的数组。 但是当我尝试更改一个元素 ([0,0]) 时,它会更改所有三个数组的第一个元素。为什么会这样?如何在没有 2 个循环来启动数组的情况下修复此行为?

最佳答案

因为您创建了一个数组 Enumerable.Repeat('.', 3).ToArray() 并克隆了对该数组的引用 3 次。 因此,您对一个值有 3 个引用。 您需要初始化每一行:

var board = Enumerable.Repeat((char[])null, 3).ToArray();
for (int i = 0; i < 3; i++)
{
    board[i] = Enumerable.Repeat('.', 3).ToArray();
}
board[0][0] = 'Q';

关于c# - 初始化填充有相同元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44181267/

相关文章:

c# - 'Xamarin.Forms.Label' 和 'System.Reflection.Emit.Label' 之间的模糊引用

c# - 传入字典的模型项的类型是...,但该字典需要...

c# - 创建具有通用返回类型的函数

javascript - 将 id 从单击的 div 推送到我的数组中

java - 为什么我不能在 Java 中使用变量声明三维数组?

c# - 为 VS2010 中的函数生成代码片段

c# - 从未知接口(interface)获取属性

c - C 中的简单缓冲区溢出

python - 这种数组是什么意思/做什么?

多维表单提交后 PHP 递归创建数据库查询 : fk field sometimes "omitted", 但为什么以及如何修复?