2

私が欲しいのは、クラスによって参照されるオブジェクトの一意のコレクションまたはセットです。このセットには、特定のクラスのオブジェクトを 1 つだけ含めることができます。考えられる機能の例を次に示します。

class A;
class B;
class C;

A a = new A();
B b = new B();
C c = new C();

UnknownCollection<object> objects;
objects.Add(A, a);    // Add(key, value)
objects.Add(B, b);
objects.Add(C, c);
var something = objects[A]; // return a reference to 'a' using class A as a key

これらの線に沿ったものがまだ存在しない場合、合理的なパフォーマンスを備えたものを作成する方法があるでしょうか?

4

2 に答える 2

7

あなたが本当に入力したいように思えDictionary<Type, object>ます:

objects.Add(typeof(A), a);
objects.Add(typeof(B), a);
objects.Add(typeof(C), a);
...

A a = (A) objects[typeof(A)];

ディクショナリが常に型をその型のインスタンスにマップする場合は、それをカプセル化して、API をクリーンに保つことができます。ディクショナリに追加できるコードだけが型が常に正しいことを保証するため、キャストが機能することが常にわかります。

編集: あはは - 2008 年にこれについてブログを書いたことがわかります。

于 2012-06-25T17:49:47.673 に答える
3

Dictionary<TKey, TValue>特に type をキーとして を探しています。

Dictionary<Type, object> map = new Dictionary<Type, object>()
{
    { typeof(A), a }
    { typeof(B), b }
};
于 2012-06-25T17:49:15.780 に答える