这些天来,一直听说 ArrayList 已经过时了。但我确实有使用 ArrayList 的真实案例,如下所示:
ArrayList GetArrayInt()
{
ArrayList l = new ArrayList();
l.Add(2);
return l;
}
ArrayList GetArrayBool()
{
ArrayList l = new ArrayList();
l.Add(true);
return l;
}
void Process(ArrayList l)
{
foreach (var o in l)
{
if (o is int)
{
}
else
{
}
}
}
然后我这样打电话Process
:
private void Form1_Load(object sender, EventArgs e)
{
Process(GetArrayInt());
//or
Process(GetArrayBool());
}
底线是我不需要为Process
整数和布尔值的 ArrayList 分别编写两个方法。
但我听到了关于 ArrayLists 的所有负面消息。所以我想使用List<T>
. 这就是我想出的:
List<bool> GetListBool()
{
var l = new List<bool>();
l.Add(true);
return l;
}
List<int> GetListInt()
{
var l = new List<int>();
l.Add(2);
return l;
}
void Process(List<object> l)
{
foreach (var o in l)
{
if (o is int)
{
}
else
{
}
}
}
现在我该怎么称呼它?
private void Form1_Load(object sender, EventArgs e)
{
Process(GetListInt()); //error
Process(GetListBool()); //error
Process((List<object>)GetListBool()); //error
}
我在这里找到的唯一解决方案是为然后是两个方法编写单独的Process
方法(我的实际代码要复杂得多,所以按照这种方法,我需要编写二十个这样的方法,它们都做同样的事情)。List<bool>
List<int>
Process
我怎样才能在方法Process
中只写一种方法List<T>
?即使在这里也可以List<T>
替换 ArrayList 吗?
更新:所有三个答案都有效,但我最喜欢@Phil 的答案。谢谢大家