在arraylist中搜索字符串

Ami*_*rma -6 .net c#

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*tti 5

你正在添加一个字符串数组ArrayList.返回值String.Split()string[],因为ArrayList是无类型的,你可以添加任何类型的对象(甚至是不同类型的对象).

改变这个:

a.Add(ss.Split(','));
Run Code Online (Sandbox Code Playgroud)

对此:

a.AddRange(ss.Split(','));
Run Code Online (Sandbox Code Playgroud)

由于所述ArrayList没有为其项目键入(它拥有通用objects).这意味着你可以这样做:

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

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

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

bool x = a.Contains("2"); // false
bool y = a.Contains(values); // true
Run Code Online (Sandbox Code Playgroud)

AddRange方法执行如下操作:

foreach (string value in values)
    a.Add(value);
Run Code Online (Sandbox Code Playgroud)

这种方式a包含数组中的项,而不是数组本身.

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

string[] values = ss.Split(',');
a.AddRange(values);
Run Code Online (Sandbox Code Playgroud)

你收藏的内容更明显.第二步是使用泛型集合(强类型):

List<string> a = new List<string>();
a.AddRange(values); // OK
a.Add(values); // Compiler error
Run Code Online (Sandbox Code Playgroud)

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