.NET 2中的唯一列表<t> </t>

时间:2010-02-04 14:18:31

标签: .net collections .net-2.0 unique

什么是

  • 最好是通用的;
  • 唯一(IComparable / IEquitable)重要

.NET 2 的对象集合?

àla List<T>,或者等同于.NET 3.5的HashSet<T>,但没有订购商品)

4 个答案:

答案 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类。它运行得很好。图书馆里有很多好东西。