【问题标题】:Wrapping or Copying During User-Defined Casts在用户定义的强制转换期间包装或复制
【发布时间】:2016-09-13 19:25:11
【问题描述】:

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

【问题讨论】:

    标签: c# dictionary collections casting type-conversion


    【解决方案1】:

    除了性能之外,唯一值得关注的是可变性。由于您的实现不是不可变的,第一种方法可能更正确,因为它允许底层字典的直接可变性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多