2

我想要的是它们的类引用的对象的唯一集合或集合。该集合只能包含给定类的一个对象。以下是一些可能功能的示例:

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 回答