将对象数组传递给函数

将对象数组传递给函数

问题描述:

我有一个名为“Tiles”的类。将对象数组传递给函数

public class Tiles 
{ 

    public int cordX, cordY, tileID; 
    Booleans someBooleans; 
    public constructor(int X,int Y,int ID) 
} 

程序创建一个2D网格并将信息(XY位置,tileID)存储在Tiles类的对象数组中。就像这样:

通过两次创建新的对象数组

Tiles[] tileArray = new Tiles[totalGridSize]; 

环实例的单个元素的对象数组

tileArray[X + Y] = new Tiles(xPos, yPos, ID); 

到目前为止,一切都按预期工作英寸但是现在我想将tileArray的元素传递给一个函数。 (是没关系的功能是静态的?)

public static void tileStatusChecker(Tiles x[])<--- 
{  

    Console.WriteLine("Position is {0}X and {1}Y. ID=={2}", x.cordX, x.cordY, x.tileID)  
} 

==这给我的错误:

Error CS1552 Array type specifier, [], must appear before parameter name

不够公平,那一定是很容易修复。

public static void tileStatusChecker(Tiles[] x) 
{ 

    Console.WriteLine("Position is {0}X and {1}Y. ID=={2}", x.cordX, x.cordY, x.tileID)  
} 

现在,编译器是真的气我:CS1061“的瓷砖[]”不包含关于“tileID”和没有扩展方法的定义“tileID”接受型的第一参数“的瓷砖[]”可以找到(你是否缺少一个使用指令或程序集引用?)

同时编译器也疯了,我首先调用函数,声明数组从未创建。

Tiles.tileStatusChecker(tileArray[7]); 

CS0103 The name 'tileArray' does not exist in the current context

我有一个标准的“学习C#和Visual Studio”的书在我旁边,但对象数组不涵盖的。我认为这里的实际错误是我不知道自己在做什么。那么有谁能告诉我如何将一个对象数组传递给一个方法?我不想只复制+粘贴代码并让某人为我修复它。我试图在*上找到一个解决方案,但在搜索“C#object array to function”或类似搜索结果后得到了10,214个结果。

+0

请花费更多时间来格式化您的代码。你根本没有缩进,并且在某一时刻,你已经在'{'的同一行上获得了一个方法体。你应该努力使问题尽可能容易阅读。 –

+1

但它听起来像你真的不感兴趣传递整个阵列,而是一个瓦片。只需将'Tiles []'更改为'Tile',即可解决这两个问题。毕竟,'tileArray [7]'的值是一个'Tiles'引用,而不是一个数组......并且打印出“数组的位置”的想法是毫无意义的。现在也是查找.NET命名约定的好时机。 –

+0

嗯,我建议你让你的IDE格式化代码,并确保它看起来像这个问题。 (目前还不清楚布尔人是什么......) –

编辑:哎呀,我错过了一个小细节,并完全向后回答你的问题。现在很明显,你不需要将数组放入你的函数中,因为你用适当的访问器引用调用了你的函数。如果你重写你的函数采取而不是Tiles[],你应该很好。您的所有问题都是因为您的代码预计x为,而函数声明预计xTiles[]

随意忽略下面的代码块,但确实在最后敲击注。

你的第二个镜头是不是你的第一次尝试更好的,移交阵列中的一个函数确实应该像

public static void tileStatusChecker(Tiles[] x) 

但你的下面的代码,它试图得到“x.cordX”的价值观,将找不到它们 - 数组没有.CordX;瓷砖有一个.CordX。如果你想实际得到一个Tiles,你会想要,比如x [0]中的第一个(或者说技术上的'zeroeth')元素。例如。第一个Tiles的CordX将是x [0] .CordX。

附注: 它经常帮助我写和谈论我的代码,以选择符合我命名的语法结构的名称。如果它是一个对象,我通常称它为Object,比如Object。如果一个类表示一个tile,我会称之为“Tile”而不是“Tiles”。如果你有第二个类代表一个Tiles集合,就像一个二维数组的包装(正如我以前所做的那样),然后我会将它命名为Tiles。

+0

是的,如果我将其更改为tileStatusChecker(Tiles [int] x)以及该函数访问x [int] .cordY的数据,它实际上可以工作。 – Freeman0x5C

+0

我很确定我试图这样说,但由于某种原因,它不起作用,可能是因为我在玩“静态”访问器太多。现在我唯一需要处理的是[CS0119'Tiles'是一种类型,它在给定上下文中无效]错误,当我实际调用函数时。但这是标准的故障排除。无论如何,Thx很多!我被困在那里2-3个小时。最后我可以谷歌新的错误信息。 – Freeman0x5C

+0

http://cube-drone.com/comics/c/progress Tiles.functionName(args);仅在functionName是Tiles类中定义的静态函数时才有效。 祝你好运!乐于帮助。 –