我有一个自定义集合类,实现了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:我不是在寻找 “最佳实践” 或主观的答案。如果答案是“否,在使用一种方法或另一种方法时没有客观的非性能支持差异”这是可以接受的答案。