【发布时间】:2026-02-18 08:45:02
【问题描述】:
我想声明一个字典,存储特定类型的输入IEnumerable,以该确切类型作为键,如下所示:(编辑以遵循 johny g 的评论)
private IDictionary<Type, IEnumerable<T>> _dataOfType where T: BaseClass; //does not compile!
我要存储的具体类都派生自 BaseClass,因此我想将其用作约束。编译器抱怨它需要在成员名称后加一个分号。
如果可行,我希望这将使以后从字典中检索变得简单,例如:
IEnumerable<ConcreteData> concreteData;
_sitesOfType.TryGetValue(typeof(ConcreteType), out concreteData);
如何定义这样的字典?
【问题讨论】:
-
普通约束类型除外,声明
IDictionary<T, IEnumerable<T>>将键约束为T的instances,而不是typeof (T)。你想通过typeof(T)或T的实例来索引你的列表吗?如果是前者,则应声明为IDictionary<Type, IEnumerable>并在消费时强制转换可枚举的各个成员 -
是的,johnny g,你是对的,我想使用类型,而不是实例。我编辑那个。
标签: c# generics dictionary types