什么是
.NET 2 的对象集合?
(àla List<T>
,或者等同于.NET 3.5的HashSet<T>
,但没有订购商品)
答案 0 :(得分:8)
不幸的是,第一个好的框架类是HashSet,你只能通过.Net 3.5访问它。
如果您遇到以前的版本,那么选项就不那么好了。最常见的是使用Dictionary类型,其中Key是您尝试存储的值。你可以很容易地将它包装在你自己的课程中。
如果您愿意一起走出框架,那么.Net的数据结构集合,例如NGenerics。
答案 1 :(得分:3)
你需要的是一个Set,据我记得在2.0中没有Set实现。您可以查看this。
编辑:如果你真的想要实现自己的,那么这样做会牺牲插件的性能:(我没有测试功能)
class UniqueList<T> : IList<T>
{
private IList<T> m_InternalList;
public UniqueList(IList<T> list)
{
m_InternalList = list;
}
public System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly()
{
return new System.Collections.ObjectModel.ReadOnlyCollection<T>(this);
}
#region IList<T> Members
public int IndexOf(T item)
{
return m_InternalList.IndexOf(item);
}
public void Insert(int index, T item)
{
if (!m_InternalList.Contains(item))
m_InternalList.Insert(index, item);
}
public void RemoveAt(int index)
{
m_InternalList.RemoveAt(index);
}
public T this[int index]
{
get
{
return m_InternalList[index];
}
set
{
if (!m_InternalList.Contains(value))
m_InternalList[index] = value;
}
}
#endregion
#region ICollection<T> Members
public void Add(T item)
{
if (!m_InternalList.Contains(item))
m_InternalList.Add(item);
}
public void Clear()
{
m_InternalList.Clear();
}
public bool Contains(T item)
{
return m_InternalList.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
m_InternalList.CopyTo(array, arrayIndex);
}
public int Count
{
get { return m_InternalList.Count; }
}
public bool IsReadOnly
{
get { return m_InternalList.IsReadOnly; }
}
public bool Remove(T item)
{
return m_InternalList.Remove(item);
}
#endregion
#region IEnumerable<T> Members
public IEnumerator<T> GetEnumerator()
{
return m_InternalList.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return m_InternalList.GetEnumerator();
}
#endregion
}
答案 2 :(得分:2)
您可以使用Iesi.Collections程序集中定义的HashedSet<T>
集合。
这是一个开源项目,NHibernate也使用它。
答案 3 :(得分:1)
我们曾经在.NET 2中使用PowerCollections Set类。它运行得很好。图书馆里有很多好东西。