我有一个名为“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)
}
==这给我错误:
错误CS1552数组类型说明符[]必须出现在参数名称
之前
足够公平,这一定很容易解决。
public static void tileStatusChecker(Tiles[] x)
{
Console.WriteLine("Position is {0}X and {1}Y. ID=={2}", x.cordX, x.cordY, x.tileID)
}
现在编译器对我很生气: CS1061'Tiles []'不包含'tileID'的定义,并且没有扩展方法'tileID'接受'Tiles []'类型的第一个参数可能是找到了(您是否缺少using指令或程序集引用?)
同时编译器也很生气我首先调用该函数,声明从未创建过该数组。
Tiles.tileStatusChecker(tileArray[7]);
CS0103当前上下文中不存在名称“tileArray”
我旁边有一本标准的“学习c#和视觉工作室”一书,但对象阵列根本没有涉及。我认为这里的实际错误是我不知道自己在做什么。那么有人能告诉我如何将一个对象数组传递给一个方法吗?我不想只是复制+粘贴代码并让别人为我修复它。我试图在stackoverflow上找到一个解决方案,但在搜索“C#object array to function”或类似内容之后,最终获得了10,214个结果。
答案 0 :(得分:1)
编辑:哎呀,我错过了一个小细节,完全倒退了回答你的问题。现在很清楚,你实际上并不想将一个数组交给你的函数,因为你用一个合适的访问器引用来调用你的函数。如果你重写你的函数来取Tiles
而不是Tiles[]
,你应该是好的。由于您的代码希望x
为Tiles
而您的函数声明预期x
为Tiles[]
,因此您的所有问题都会出现。
随意忽略以下代码块,但最后确实按下了注释。
你的第二次拍摄比第一次尝试更好,将一个数组交给一个函数应该看起来像
public static void tileStatusChecker(Tiles[] x)
但是您的以下代码尝试获取&#34; x.cordX&#34;等值,将无法找到它们 - 数组没有.CordX;瓷砖有一个.CordX。如果你想真正得到一个Tiles,你会想要,比如说x中的第一个(或者技术上是&#39;零&#39;)元素,即x [0]。例如。第一个Tiles的CordX将是x [0] .CordX。
边注: 它经常帮助我编写和讨论我的代码,以选择符合我命名的东西的语法结构的名称。如果它是一个对象,我通常称之为对象,例如如果一个类代表一个瓷砖我会称之为&#34; Tile&#34;而不是&#34; Tiles&#34;。如果你有一个代表Tiles集合的第二个类,就像一个二维数组的包装器(正如我过去所做的那样),然后我会把它命名为Tiles。