我有一个自定义集合类,它实现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:我不是在寻找&#34;最佳实践&#34;或主观答案。如果答案是&#34;否,则使用一种方法或另一种方法没有客观的非绩效支持差异。这是一个可以接受的答案。
答案 0 :(得分:1)
除了表现之外,唯一的问题是可变性。由于您的实现不是不可变的,第一种方式可能更正确,因为它允许底层字典的直接可变性。