【发布时间】:2013-02-13 01:17:43
【问题描述】:
我有一个对象层次结构:
MyObject
+Variable
+etc.
(所以 MyObject 是基类,Variable 是子类之一)。
我有特定类型的字典
private ConcurrentDictionary<string, Variable> variables
= new ConcurrentDictionary<string, Variable>();
等等
我想把所有不同的列表放在一个高级词典中,在那里我可以找到所有特定的列表:
private Dictionary<Type, ConcurrentDictionary<string, MyObject>> objects
= new Dictionary<Type, ConcurrentDictionary<string, MyObject>>();
但我无法将特定词典添加到高级词典:
objects.Add(typeof(Variable), variables); // DOES NOT COMPILE
有没有办法做我想做的事?我不想将变量列表定义为
private ConcurrentDictionary<string, MyObject> variables
= new ConcurrentDictionary<string, MyObject>(); // WORKS, BUT NOT NICE TO USE
所以我想使用特定的列表来执行特定于类型的操作,而且还通过“对象”字典对所有对象类型启用通用操作,这样我就不需要为每个子类型手动编写所有代码。
例如,我想定义一个这样的方法:
public List<Variable> GetVariables()
{
return variables.Values.ToList();
}
所以当我知道它们都是变量时,我可以使用变量对象。
【问题讨论】:
-
当您添加项目时,您并没有添加密钥。
Add方法接受一个键和一个值。您想要字典词典还是字典列表?我认为这里也有尝试的差异会失败。 -
你能告诉我当你尝试添加特定类型的字典时会发生什么,编译器错误是什么?
-
你的对象层次结构,你的意思是
Variable是一个派生自MyObject的类吗? -
对不起,我错过了钥匙。关键是类型,所以我可以获取特定类型的正确字典。
-
@Philipp M,是的,我就是这个意思。
标签: c# .net generics inheritance dictionary