我想要的是由他们的类引用的对象的唯一集合或集合。该集合只能包含给定类的一个对象。以下是一些可能的功能示例:
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
如果这些行中的某些内容尚不存在,是否可以创建一个具有合理性能的方法?
答案 0 :(得分: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清洁。你总是知道演员会工作,因为唯一可以添加到字典的代码可以确保类型总是正确的。
编辑:啊哈 - 事实证明我blogged about this back in 2008。
答案 1 :(得分:3)
您正在寻找Dictionary<TKey, TValue>
,特别是类型为关键字:
Dictionary<Type, object> map = new Dictionary<Type, object>()
{
{ typeof(A), a }
{ typeof(B), b }
};