2013-02-06 64 views
1

我正在.NET中開發一個項目,很遺憾使用舊的.NET 2.0框架(由於更新許多客戶端的困難,驗證更新版本的框架以安裝在許多計算機中等等......)。.NET Framework 2.0中的集合的替代方案

我已經看到,大部分集合類都來自.NET 4框架。 如果我需要集合和地圖,你會推薦使用什麼,但是我需要使用.NET 2.0框架?我應該從頭開始實施我想要使用的每個集合嗎?

除了我不知道的System.Collections.Generic命名空間之外,還有更多的集合嗎? (參考這裏:

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

我想最好的決定將是說服人們所需的所有客戶端更新到4.5 .NET框架,因爲這會帶來更多的發展機會,而這個版本將帶來許多改進。但我不確定我能否改變這一點。那麼你在我的職位上會做什麼?

謝謝您的閱讀。 此致敬禮。

+3

我一定誤會了你。如果您想在.NET 2.0中使用「地圖」,則可以使用[Dictionary ](http://msdn.microsoft.com/zh-cn/library/xfhwa508%28v=vs.80%29.aspx)類。至於集合,你可以使用'Dictionary ',因爲你很遺憾在.NET 2.0中沒有'HashSet '(據我所知)。 –

+0

4.5在Windows XP上不受支持,但4.0是。 2.0和4.0之間的差異是巨大的。我建議你考慮使用4.0 –

+0

你需要什麼*特定*集合的可能性? – Servy

回答

3

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(); 
    } 

    // ... 
} 
+1

非常清楚。謝謝 ! – pablof

8

我已經看到,大部分集合類都從.NET 4框架。

根本不是這樣。該System.Collections.Concurrent命名空間來發揮作用的是.NET 4,但的泛型集合抵達.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,但你可以使用替代實現LINQ到對象(例如LINQBridge)針對.NET 2.0。如果你有一個現代版本的Visual Studio,這很好,你可以使用C#3和更高版本的某些語言功能,即使你瞄準.NET 2。

+0

謝謝你的回答。你是對的,它不是收藏類的大多數。我主要在尋找Set實現。這就是爲什麼我覺得在2.0版本中有一些重要的東西(HashSet和SortedSet)。也許集是我將在2.0中錯過的唯一集合(但它是我首先需要的集合)。雖然我的地圖問題可以用Dictionary來覆蓋。謝謝。 – pablof

+0

@pablof:如果你想要套,你應該在你的問題中說。將來會更具體。 –

+0

是的,對不起,我應該更具體。感謝您的時間。你的回答也非常有用:) 只有.NET 2纔有,而且我也會試用LINQBridge。 – pablof

相關問題