2

私のアプリケーション開発では、この変数が必要であると結論付けました。

IDictionary<string, IDictionary<Levels, IList<Problem>>> PackageDictionaryForProblems
IDictionary<string, IDictionary<Levels, IList<ProblemRule>>> PackageDictionaryForProblemRules

しかし、辞書の各キーにアクセスする必要があるので、面倒です。すべてのデータ型の書き込みを避けるために、クラスを作成するのが良いオプションだと思いました。

public class PackageDictionaryForProblems : IDictionary<string, IDictionary<Levels, IList<Problem>>>
{ }

// the sane for the second dictionary

これについてあなたはどう思いますか?このクラスだけを作成することをお勧めしますか? または、それぞれに複数のクラスを作成する必要がありますか? IE

public class ProblemCollection : IList<Problem>
{ }
4

5 に答える 5

3

次のような複数レベルのコレクションを定義する 2 つのオプションの間に、runtype に違いはありません。

IDictionary<string, IDictionary<Levels, IList<Problem>>> PackageDictionaryForProblems

または次のようなタイプを定義/使用する

public class PackageDictionaryForProblems : IDictionary<string, IDictionary<Levels,     IList<Problem>>>
{ }

にそれ以上の機能がなければPackageDictionaryForProblems、単に のエイリアスとして機能しますIDictionary<string, IDictionary<Levels, IList<Problem>>>

IDictionary<string, IDictionary<Levels, IList<Problem>>>それでも同じメモリ割り当て、アクセス時間などになります。そのカスタム型を追加しても、コードの可読性が単純化されるだけです (またはそうではありません...個人的には、定義を見てデータ構造を理解する方が簡単だと思います。それは単なる個人的なことです)好み)。

于 2012-07-30T18:43:08.577 に答える
2

このクラスだけを作成することをお勧めしますか?

特にこの場合、カスタム クラスを使用する主な利点は、アクセスを簡素化できることです。

ネストされたディクショナリへのアクセスは、多くの場合、より高いレベルのメンバー関数を追加することで簡素化できます。これは、「単一アクセス」では、新しいディクショナリなどを追加できるラップされたディクショナリのチェックが必要になることが多いためです。これを単純な API にラップすると、型の使用が大幅に簡素化されます。

ただし、基になる型を直接公開するだけの場合は、組み込みの型を使用するだけで、このクラスを作成するメリットはほとんどありません。

于 2012-07-30T18:46:45.543 に答える
2

string型がプリミティブ (または など)でない限り、ジェネリック型を複数の深さでネストすることは避ける傾向がありますint。おそらくリファクタリングして、s からLevels にマップするジェネリック クラスを作成しますT

class LevelMapping<T> {
  IDictionary<Level, T> Mapping {get; set;}

  // constructors/methods etc
}

IDictionaryこれで、stringからLevelMappingsを取得できます。

IDictionary<string, LevelMapping<Problem>> PackageDictionaryForProblems;
IDictionary<string, LevelMapping<ProblemRule>> PackageDictionaryForProblemRules;

もちろん、これはここでマッピングする内容の詳細に依存します。ドメインをより適切に反映するために、辞書全体を特別な方法でラップする (またはまったくラップしない!) 方が適している可能性があります。

于 2012-07-30T18:50:46.187 に答える
1

私が追加クラスを使用する 3 つの理由は次のとおりです。

  1. 読みやすさ。
  2. 追加のメソッド、プロパティ、およびオーバーライドを簡単に追加
  3. 型を簡単に変更できます (オブジェクトをインスタンス化するコード内の型を探すのではなく、基本型を置き換えるだけです。
于 2012-07-30T18:47:47.790 に答える
0

個人的には、既存の機能にエイリアスを付けるためだけにクラスを作成する理由はないと思います。

于 2012-07-30T18:42:12.807 に答える