2011-06-06 143 views
0

我有這個二維數組或結構如何檢查二維數組中的密鑰對是否存在?

public struct MapCell 
{ 
    public string tile; 
} 

public MapCell[,] worldMap; 

但是沒有辦法檢查密鑰對存在這個數組中或不...對於沒有可用的方法。

我試圖做這樣

if (worldMap[tileX, tileY] != null) { 
} 

它不工作:

Error 1 Operator '!=' cannot be applied to operands of type 'Warudo.MapCell' and '<null>' 

if (worldMap[tileX, tileY].tile != null) { 

它不工作,要麼(異常彈出時擊中不存在的元素)。

Index was outside the bounds of the array. 

那麼,如何檢查密鑰對是否存在?

+1

你必須使用數組嗎?也許類似字典的集合類將爲您提供您正在尋找的功能。 – FishBasketGordo 2011-06-06 19:08:21

+0

@FishBasketGordo ummm,它可以用作二維數組嗎?它會提供檢查方法嗎? – NewProger 2011-06-06 19:11:44

+0

爲什麼你使用一個結構?可變的結構是一個壞主意......我可能會在這裏推薦一門課。 – 2011-06-06 19:11:59

回答

3

你從來沒有提到你正在得到哪個錯誤 - 數組超出界限或空引用。如果您收到數組越界你應該沿着線的東西先於您的空檢查...

// make sure we're not referencing cells out of bounds of the array 
if (tileX < arr.GetLength(0) && tileY < arr.GetLength(1)) 
{ 
    // logic 
} 

當然,最好只存儲最大數組邊界,而不是每次都讓它們的長度。

我也第二(第三?)使用類而不是結構的建議。

編輯:你有沒有真的初始化這個領域?您沒有將其包含在您的代碼示例中。例如worldMap = new MapCell[100,100];,然後填滿陣列...

+0

當然,我會初始化它。我認爲我不必包含這部分。 – NewProger 2011-06-06 19:17:31

+0

通常最好包含與手頭問題相關的所有內容。有時候,問題出在你不懷疑的地方,每個人都有這個問題:) – 2011-06-06 19:19:18

+0

好的,當我問下一個問題時,我會記住它:) – NewProger 2011-06-06 19:21:12

-1

如果您使用的是一組結構值,它們將始終存在(一旦構建數組),但在設置它們之前具有其默認值。

我會推薦在這裏使用一個類而不是一個結構。這將允許你檢查null,以及如果你打算改變數值(其中,給定名稱,我期望...),以更多的預期方式行動。

這就是說,你可以檢查的結構內的字符串是否爲空:

if (worldMap[tileX, tileY].tile != null) 
{ 
    // You've set the "tile" field inside of this "cell"... 

這工作,因爲一個struct的默認值與所有參考文獻,包括字符串初始化爲null。

+0

不,瓦片不一定是空的,但數組可能沒有,可以說tileX = 10,那麼它會彈出異常,該密鑰不存在。 – NewProger 2011-06-06 19:13:39

+0

@Lurler請複製粘貼您收到錯誤的確切文字。我不明白你會得到一個「密鑰不存在」的錯誤。 「索引超出了數組的範圍」通常會是你會看到的錯誤。 – 2011-06-06 19:23:14

+0

我照你說的做了,併發布了精確的錯誤和我使用的代碼。 – NewProger 2011-06-06 20:01:52

相關問題