2013-04-07 78 views
1

我試圖查看數組中是否存在某個元素。 我有一個函數,我添加元素到我的數組和一個搜索函數,如果元素存在返回true。我一直讓對象引用未設置爲對象錯誤的實例。C#在數組中查找匹配

我有一個字段:

int [] Items; 

這是搜索功能:

public bool Search(int item) 
{ 

    bool isInArray = false; 
    for (int i = 0; i < Items.Length; i++) // ERROR HERE 
    { 
     if (Items[i] == item) 
     { 
      isInArray = true; 
      break; 
     } 

    } 
    return isInArray; 


} 

這是增加功能:

public void Add(int item) 
{ 

    if (Items == null) 
    { 
     Items = new int[1]; 
    } 
    else 
    { 
     Array.Resize<int>(ref Items, Items.Length + 1); 
    } 
    Items[Items.Length - 1] = item; 
} 
+0

錯誤發生在哪裏? – christopher 2013-04-07 21:57:02

+0

你的錯誤發生在哪裏?你的數組是否初始化? – 2013-04-07 21:57:25

+1

只有1個地方可能發生。什麼是物品?你在哪裏設定它的價值? – 2013-04-07 21:58:36

回答

0

Items需要被intialized,例如在構造函數中。例如。 Items = new int [10]

+0

謝謝,但數組的大小應該與總元素相同。 – Ben 2013-04-07 22:31:59

1

您的項目爲空,只要你不要至少添加一個。

+0

在包含函數之前,我在表單中調用了add函數,所以它應該是空的嗎? – Ben 2013-04-07 22:02:48

+1

那麼,將初始化數組的初始化行設置爲斷點,並指向循環,然後查看Items是否爲null。 – nvoigt 2013-04-07 22:06:40

0

變化

for (int i = 0; i < Items.Length; i++) 

for (int i = 0; i < (Items?? (Items = new int[0])).Length; i++) 
+0

這會殺死邏輯,因爲如果有人會嘗試在添加之前進行搜索 - 項目的第一個元素將爲0. – outcoldman 2013-04-07 22:05:08

+0

ahhh,是的,那麼代碼應該爲Items創建零長度數組,而不是單個元素數組。我編輯了我的答案以反映這一點。 – 2013-04-07 22:28:08

0

檢查空之前,你會做循環:

public bool Search(int item) 
{ 
    bool isInArray = false; 
    if (Items != null) 
    { 
     for (int i = 0; i < Items.Length; i++) // ERROR HERE 
     { 
      if (Items[i] == item) 
      { 
       isInArray = true; 
       break; 
      } 
     } 
    } 
    return isInArray; 
} 
0
public bool Search(int item) 
{ 
    return Array.IndexOf(Items, item) > 0 ? true : false; 
} 

也許這可行。