在C#2.0 中,List<>是ArrayList的泛型版本。当需要向列表添加同一个类的实例时,用List<>代替ArrayList是最好的选择,代码清晰了,同时也避免了装箱撤箱,代码执行效率也提高了。
类ArrayList在命名空间System.Collections中,而List<>在命名空间System.Collections.Generic中,所以使用List<>时不要忘了添加using System.Collections.Generic。
下面的例子具体说明如何用List<> 代替 ArrayList:
先声明你要添加到List<>或ArrayList的类OneMember
public class OneMember
{
private string m_Code;
private int m_Value;
public OneMember(string code,int value)
{
m_Code = code;
m_Value = name;
}
public int Code
{
get { return m_Code; }
}
public string Value
{
get { return m_Value; }
}
}
以下演示向ArrayList添加OneMember:
ArrayList a = new ArrayList();
a.Add(new OneMember("0001",111));
...
当从a中读取对象时类似的代码如下:
foreach(Object obj in a)
{
OneMember one = (OneMember)obj;
.....
}
现在就用List<>替换ArrayList。首先把ArrayList a = new ArrayList(); 改为
List<OneMember> a = new List<OneMember>();
从a中读取对象时类似的代码如下:
foreach(OneMember obj in a)
{
OneMember one = obj;
.....
}
如果需要在List<>下使用索引,同样需要构造一个索引器,不过List<>下使用索引器与ArrayList的索引器不太一样,接上面代码举例如下:
private class _IComparer : IComparer<OneMember>
{
int IComparer<OneMember>.Compare(OneMember x, OneMember y)
{
return string.Compare(x.Code, y.Code);
}
bool IComparer<OneMember>.Equals(OneMember x, OneMember y)
{
return x.Code == y.Code;
}
int IComparer<OneMember>.GetHashCode(OneMember x)
{
return 0;
}
}
对a 进行索引并用BinarySearch检索与ArrayList一样,在此就不啰嗦了。
如果你用的是C#2.0还犹豫什么,现在就用List<>代替 ArrayList吧。
注:Microsoft Visual Studio 2005 Beta1 version 8.0.40607.16
Microsoft .NET Framework version 2.0.40607