1.1里面HashTable ArrayList里面都是object类型,2.0里面泛型对此做了优化
Dictionary<>其实就好比HashTable.类型更加安全。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同,hashtable好像是后进先出的。
List<> 类是 ArrayList 类的泛型等效类。
tag:1.1集合
2.关于迭代器
//自定义数据集合必须实现IEnumerable接口的GetEnumerator()同时数据集合中的元素必须实现IEnumerator接口成员
//1.1数据集合类
public class Person : IEnumerable
{
public string[] m_Names;
public Person(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names, 0);
}
public string this[int index]
{
get { return m_Names[this]; }
set { m_Names[this] = value; }
}
IEnumerator IEnumerable.GetEnumerator()
{
//返回一个包含对象的迭代器
return new PersonEnumerator(this);
}
}
//集合元素类
public class PersonEnumerator : IEnumerator
{
int index = -1;
Person p;
public PersonEnumerator(Person p)
{ this.p = p; }
object IEnumerator.Current
{
get { return p.m_Names[index]; }
}
bool IEnumerator.MoveNext() {
//向下移动一位
}
void IEnumerator.Reset() { index = -1; }
}
//2.0没有实现集合元素类,编译器自动完成这个
class Persons<T> : IEnumerable<T>
{
private T[] m_Names;
public Persons(params T[] Names)
{
m_Names = new T[Names.Length];
Names.CopyTo(m_Names, 0);
}
//使用yield实现简单的迭代器
public IEnumerator<T> GetEnumerator()
{
for (int i = 0; i < m_Names.Length; i++)
{
//使用yield 依次返回每个元素
yield return m_Names[i];
//yield break;终止迭代
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
//1.1数据集合类
public class Person : IEnumerable
{
public string[] m_Names;
public Person(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names, 0);
}
public string this[int index]
{
get { return m_Names[this]; }
set { m_Names[this] = value; }
}
IEnumerator IEnumerable.GetEnumerator()
{
//返回一个包含对象的迭代器
return new PersonEnumerator(this);
}
}
//集合元素类
public class PersonEnumerator : IEnumerator
{
int index = -1;
Person p;
public PersonEnumerator(Person p)
{ this.p = p; }
object IEnumerator.Current
{
get { return p.m_Names[index]; }
}
bool IEnumerator.MoveNext() {
//向下移动一位
}
void IEnumerator.Reset() { index = -1; }
}
//2.0没有实现集合元素类,编译器自动完成这个
class Persons<T> : IEnumerable<T>
{
private T[] m_Names;
public Persons(params T[] Names)
{
m_Names = new T[Names.Length];
Names.CopyTo(m_Names, 0);
}
//使用yield实现简单的迭代器
public IEnumerator<T> GetEnumerator()
{
for (int i = 0; i < m_Names.Length; i++)
{
//使用yield 依次返回每个元素
yield return m_Names[i];
//yield break;终止迭代
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}