這些天來,已經聽到ArrayList越來越陳舊了。但我有一個真正的情況下使用ArrayList,像這樣:如何在此處使用列表<T>代替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
方法分別爲一個int和bools的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嗎?
更新:所有三個答案的工作,但我喜歡@菲爾的回答最好。感謝所有
很好的例子。這會在C#2.0中工作嗎? – nawfal
此外,這裏有什麼奇怪的? – nawfal
不,不是2.0,協方差是4.0以上。 – Phil