刚开始学习C#并努力了解正在发生的事情。这是我的问题的简化版本。我将包括所有属性和方法的实际代码,但这是一个大项目,根本不可能。这种构建的场景应该可以模拟我遇到的问题。
所以说我有一个叫做Dog的课程。狗具有多个属性:_name,_breed和_image。现在考虑我还有另一个类Kennel,它具有以下属性:_name,_address和_dogs,其中_dogs我已定义为dog类型的2D数组。 (这些是属性,其getter / setter遵循标准符号)。
现在在我的主要方法中,我创建并实例化Kennel类型的变量,如下所示:
Kennel kennel = new Kennel();
for (int i = 0; i < xlength; i++)
{
for (int j = 0; j < ylength; j++)
kennel.Dogs[i, j] = new Dog();
}
并用一堆默认的空白狗填充它。现在,据我所知,此时一切正常。当我尝试将数据添加到特定的狗时,会发生此问题。
如果我尝试
kennel.Dogs[12,22].Name = "Fido"
它将所有狗设置为“ fido”的名称。不只是(12,22)的狗。
是什么原因造成的?如何更改一只狗的财产?
答案 0 :(得分:0)
我可以通过三种情况导致此症状:
Dog
对象,并且数组中的每个单元格都是对该单个对象的引用;如果是这样:修复您的数组初始化以创建多个不同的对象;根据问题中的代码,似乎没有是这种情况Dog
对象,但是保存名称的字段是static
字段;如果是这样:修复该字段(删除static
)Dog
对象,但是名称是通过对它们之间共享的另一个中间对象的单独引用来实现的;如果是这样:修复中间引用