2013-04-07 116 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; 
} 

也许这可行。