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)
你正在添加一个字符串数组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)
在这种情况下,如果您尝试添加错误类型的对象,编译器将发出错误.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |