2016-08-11 300 views
0

我有一個名爲「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」的書在我旁邊,但對象數組不涵蓋的。我認爲這裏的實際錯誤是我不知道自己在做什麼。那麼有誰能告訴我如何將一個對象數組傳遞給一個方法?我不想只複製+粘貼代碼並讓某人爲我修復它。我試圖在stackoverflow上找到一個解決方案,但在搜索「C#object array to function」或類似搜索結果後得到了10,214個結果。

+0

請花費更多時間來格式化您的代碼。你根本沒有縮進,並且在某一時刻,你已經在'{'的同一行上獲得了一個方法體。你應該努力使問題儘可能容易閱讀。 –

+1

但它聽起來像你真的不感興趣傳遞整個陣列,而是一個瓦片。只需將'Tiles []'更改爲'Tile',即可解決這兩個問題。畢竟,'tileArray [7]'的值是一個'Tiles'引用,而不是一個數組......並且打印出「數組的位置」的想法是毫無意義的。現在也是查找.NET命名約定的好時機。 –

+0

嗯,我建議你讓你的IDE格式化代碼,並確保它看起來像這個問題。 (目前還不清楚布爾人是什麼......) –

回答

1

編輯:哎呀,我錯過了一個小細節,並完全向後回答你的問題。現在很明顯,你不需要將數組放入你的函數中,因爲你用適當的訪問器引用調用了你的函數。如果你重寫你的函數採取而不是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類中定義的靜態函數時纔有效。 祝你好運!樂於幫助。 –