C#引用的对象集

时间:2012-06-25 17:47:35

标签: c# .net collections set

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

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

如果这些行中的某些内容尚不存在,是否可以创建一个具有合理性能的方法?

2 个答案:

答案 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 }
};
相关问题