2016-09-13 57 views
0

我有一個自定義集合類,實現了IDictionary<TKey, TValue>,實際上使用System.Collections.Generic.Dictionary<TKey, TValue>作爲我的自定義集合的基礎存儲。我想隱式強制轉換爲Dictionary並將其明確強制轉換爲我的自定義類。在用戶定義的演員陣列中包裝或複製

我不完全確定的是當鑄造Dictionary<TKey, TValue>我應該返回底層集合還是將底層字典複製到一個新對象並返回該值?同樣在相反的方向,Dictionary<TKey, TValue>,我應該包裝鑄造字典或複製值到一個新的字典?

我的實現不是不可變的,而只是增加了一些額外的功能。我個人看不出任何一種轉換方法會產生的問題。在這種特定情況下,對底層集合的修改不會導致包裝集合的狀態出現問題。因此,是否存在一種基於非性能的理由來使用另一種方法?

示例類:

public class MyDictionary<TKey, TValue> : IDictionary<TKey, TValue> 
{ 
    ... 
    public static implicit operator Dictionary<TKey, TValue>(MyDictionary<TKey, TValue> myDict) 
    { 
     return myDict.dictionary; 
    } 

    //OR 

    public static implicit operator Dictionary<TKey, TValue>(MyDictionary<TKey, TValue> myDict) 
    { 
     return new Dictionary(myDict); 
    } 

    ... 
} 

PS:我不是在尋找 「最佳實踐」 或主觀的答案。如果答案是「否,在使用一種方法或另一種方法時沒有客觀的非性能支持差異」這是可以接受的答案。

回答

1

除了表現,唯一的擔憂是可變性。由於你的實現不是不可變的,第一種方法可能更正確,因爲它允許底層字典的直接可變性。