2016-09-13 28 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

除了表现,唯一的担忧是可变性。由于你的实现不是不可变的,第一种方法可能更正确,因为它允许底层字典的直接可变性。