2

不幸的是,我正在.NET 中开发一个项目,使用旧的.NET 2.0 框架(由于更新许多客户端的困难,验证框架的新版本以安装在许多计算机上,等等......)。

我已经看到大多数集合类都来自 .NET 4 框架。如果我需要 Sets 和 Maps 但我需要使用 .NET 2.0 框架,你会推荐使用什么?我应该从头开始实现我想使用的每个集合吗?

除了我不知道的 System.Collections.Generic 命名空间之外,还有更多的集合吗?(参考这里:

http://msdn.microsoft.com/en-us/library/system.collections.generic%28v=vs.80%29.aspx

我想最好的决定是说服必要的人将所有客户端更新到 4.5 .NET 框架,因为这将带来更多的开发可能性,并且这个版本将带来许多改进。但我不确定我是否能够改变这一点。那么你会在我的位置上做什么?

感谢您的阅读。问候。

4

3 回答 3

8

我已经看到大多数集合类都来自 .NET 4 框架。

这根本不是真的。命名空间在 .NET 4中System.Collections.Concurrent开始发挥作用,但大多数通用集合都在 .NET 2 中出现。

.NET 3.5 只有几个新的——我怀疑最重要的一个是HashSet<T>.

常用的集合(除了数组)可能是:

  • List<T>
  • Dictionary<TKey, TValue>
  • LinkedList<T>
  • Queue<T>
  • Stack<T>

... 前两个比后三个使用更广泛。所有这些都在 .NET 2 中。

另一个需要注意的重要区别是 LINQ:.NET 3.5 引入了 LINQ,但您可以针对 .NET 2.0使用 LINQ to Objects 的替代实现(例如LINQBridge )。如果你有一个现代版本的 Visual Studio,这很有效,即使你以 .NET 2 为目标,你也可以使用 C# 3 和更高版本的一些语言特性。

于 2013-02-06T16:06:22.133 回答
5

List<T>并且Dictionary<TKey, TValue>在 .NET 2.0 中可用。与大多数其他通用集合一样。而不是HashSet<T>你可以使用通用字典。你也不需要从头开始实现它。您可以将大部分功能委托给字典。例如

public class HashSet<T> : IEnumerable<T>
{
    private Dictionary<T, object> _dictionary = new Dictionary<T, object>();

    public void Add(T value)
    {
        if (!_dictionary.ContainsKey(value))
            _dictionary.Add(value, null);
    }

    public void Remove(T value)
    {
        _dictionary.Remove(value);
    }

    public void Clear()
    {
        _dictionary.Clear();
    }

    public int Count 
    { 
        get { return _dictionary.Count; } 
    }

    public IEnumerator<T>  GetEnumerator()
    {
        return _dictionary.Keys.GetEnumerator();
    }

    // ...
}
于 2013-02-06T16:02:00.077 回答
0

你应该看看Wintellect's Power Collections for .NEThttp ://powercollections.codeplex.com/

它是 .net 4 的替代品,但它几乎没有非常方便的集合。

于 2013-03-04T15:56:16.807 回答