在arraylist中搜索字符串

时间:2013-12-03 07:49:55

标签: c# .net

class Program
{      
    static void Main(string[] args)
    {
        string ss = "1,2,3";           
        string search = "2";
        ArrayList a = new ArrayList();
        a.Add(ss.Split(','));
        if (a.Contains(search))
        {
            Console.WriteLine("true");
        }
        else
        {
            Console.WriteLine("false");
        }
    }
}

3 个答案:

答案 0 :(得分:5)

您正在为ArrayList添加一系列字符串。 String.Split()的返回值为string[],因为ArrayList是无类型的,您可以添加任何类型的对象(即使是不同类型的对象)。

改变这个:

a.Add(ss.Split(','));

对此:

a.AddRange(ss.Split(','));

由于所述ArrayList没有为其项目键入(它包含通用object s)。这意味着你可以这样做:

a.Add(1);
a.Add("blue");
a.Add(AppDomain.CurrentDomain);
a.Add(new System.Windows.Forms.Control());
a.Add(new string[] { "red", "blue" });

在这种情况下,a.Contains("red")之类的搜索将返回false,因为a包含字符串数组,并且针对项目而不是针对其内容执行搜索。例如:

string[] values = ss.Split(',');
a.Add(values);

bool x = a.Contains("2"); // false
bool y = a.Contains(values); // true

AddRange方法执行如下操作:

foreach (string value in values)
    a.Add(value);

这样a包含数组中的项,而不是数组本身。

小提示
如果你正在学习C#,我会避免使用紧凑的代码,更多的是看看你在做什么:

string[] values = ss.Split(',');
a.AddRange(values);

你的收藏中更明显的是什么。第二步是使用泛型集合(强类型):

List<string> a = new List<string>();
a.AddRange(values); // OK
a.Add(values); // Compiler error

在这种情况下,如果您尝试添加错误类型的对象,编译器将发出错误。

答案 1 :(得分:1)

尽量避免使用ArrayList和其他过时的类;使用泛型 收藏品,例如, List<String>:他们更安全;在你的情况下:

   List<String> a = new List<String>();

   // If you try erroneous "a.Add(ss.Split(','))" here
   // it'll be compile time error instead of misterious run time misbehaviour
   a.AddRange(ss.Split(','));

   if (a.Contains(search))
     Console.WriteLine("true");
   else
     Console.WriteLine("false");

使用 Linq ,您可以将搜索放在一行:

class Program {      
  static void Main(string[] args) {
    String ss = "1,2,3";
    String search = "2";

    Console.WriteLine(ss.Split(',').Contains(search) ? "true" : "false");
  }
}

答案 2 :(得分:-1)

以下是修改后的代码供您参考。

class Program
{      
    static void Main(string[] args)
    {
        string ss = "1,2,3";           
        string search = "2";
        string[] arr = ss.Split(',');

        foreach(string ar in arr)
            {
            if (ar.Equals(search))
                {
                Console.WriteLine("true");
                }
            else
                {
                Console.WriteLine("false");
                }
            }

    }
}