2016-09-13 7 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つの方法または他の方法を使用する際に客観的にパフォーマンスを差し引いた差異はない」ということは、それが許容できる答えである。

答えて

1

パフォーマンス以外の問題は、変更可能性だけです。あなたの実装が不変ではないので、最初の方法はおそらく基礎となる辞書の直接的な変更を可能にするのでより正しいでしょう。

関連する問題