【问题标题】:How do I refer to nameless objects by their properties?如何通过属性引用无名对象?
【发布时间】:2014-10-22 16:32:36
【问题描述】:

如何引用无名对象? 对于一个游戏,如果我正在制作一个方形网格并使用类似的东西

for (int X =0; X <= 10; X++)
{
    for(int Y =0; Y <= 10; Y++)
    {
        new Cell(X, Y);
    }
}

我将有 100 个没有名字的单元格。之后如何修改或检查它们,也许通过它们的坐标来引用它们,例如

ThisCell.DoSomething();

通过坐标或其他东西引用单元格

停下来。我不能只拥有 1000 个或更多的细胞,每个细胞都有自己的小宠物名字可供调用。必须有一种方法来检查,例如,通过某物的坐标来检查某物的邻居,而无需制造新的细胞......

基本上我遇到的问题是,例如,对于每个邻居检查,我正在创建新的默认单元格,它返回错误的值。

例如,如果你们中的任何一个可以给我一个很好的函数来检查其向上邻居的boolean IsWalkable...我将非常感激

【问题讨论】:

  • 把它们放在一个(可能是多维的)数组中。如果您不存储引用,则无法再次引用它们。
  • 正如@Matt 所说,如果您不保留对它们的引用,则无法再次获取它们。但不仅如此,一旦您越过new Cell() 行,它们就可以用于垃圾收集,甚至可能不再存在。

标签: c# variables object


【解决方案1】:

您需要创建一个您的类型为 Cell 的数组:

Cell[,] myCells = new Cell[10,10]

new Cell(X, Y); 更改为myCells[X,Y] = new Cell();

从那里您可以随时引用任何单元格: myCells[1,2].DoSomething();

【讨论】:

    【解决方案2】:

    创建一个数组,然后将您的单元格存储在其中

    Cell[,] cells = new Cell[10,10];
    for (int X =0; X <= 10; X++)
    {
        for(int Y =0; Y <= 10; Y++)
        {
            cells[X,Y] = new Cell(X, Y);
        }
    }
    

    要延迟检索单元格,只需使用它的 x 和 y 坐标来索引数组:

    Cell someCell = cells[5,5];   // for example
    

    只需操纵坐标即可轻松找到邻居。例如,如果每个单元格也有自己的 X 和 Y 坐标(您的构造函数参数建议),您可以执行以下操作:

    Cell cellAboveMe = cells[someCell.X, someCell.Y - 1]; 
    

    虽然请注意,您需要包括边界检查(如果 Y==0 则此单元格上方没有单元格)

    这是非常基础的东西,因此您需要了解数组的工作原理。见这里:

    http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx

    例如。

    【讨论】:

    • 细胞 someCell = 细胞[5,5];这就是我的意思,这不是克隆单元格或创建一个新对象吗?
    • @AlexMitan:假设Cell 是引用类型(类)而不是值类型(结构),不。它不会克隆它,也不会创建新对象。对于您的 OutOfRange 异常,您将索引传递给超出范围的数组。
    • 'code' Cell[,] TestField = new Cell[9, 9]; for (int cX = 0; cX
    • @AlexMitan:不,它没有(见这里:dotnetfiddle.net/zr5QUA)。代码无法为您提供OutOfRangeException。如果您从中得到一个例外,那么您还有其他事情正在发生,您没有告诉我们。也许它来自Cell 的构造函数(您从未共享过该代码)。还要注意,如果你想填充整个数组,你应该循环&lt; 9,你会丢失最后一列和最后一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多