【发布时间】:2014-01-24 08:40:07
【问题描述】:
我有一个包含多层嵌套字典的复杂数据容器。
但拥有Key 和Value 属性使其不直观且难以使用。
请建议在Dictionary<,> 子类中重命名 Key 和 Value 属性的最简单方法。
更新:
Patryk Ćwiek:如果你实现了IDictionary<TKey, TValue>,你也不能重命名属性,因为它们是契约的一部分。
你是对的。我的问题不正确。在IDictionary 中使用KeyValuePair 会将对属性限制为Key 和Value。因此,如果我们想要非键/值对,我们必须使用自定义 KeyValuePair 结构来实现 IDictionary。或者可能有其他一些棘手的方法?
PS。也许有人建议使用IDictionary 代码生成模板?
【问题讨论】:
-
如果它是一个子类,那么你不能。如果你实现
IDictionary<TKey, TValue>,你也不能重命名属性,因为它们是契约的一部分。您可能可以做的是组合而不是继承。 -
我有一个包含多层嵌套字典的复杂数据容器。如果你只是为了拥有一个复合键而嵌套它们,那么创建一个
struct MyKey { string x; int y; },但让它们成为属性。做 gethashcode/平等的东西。现在您没有嵌套字典。 -
@PatrykĆwiek 你总是可以做显式接口实现来“隐藏”一些你需要实现的成员。
-
@ta.speot.is 是的。但在 OP 的情况下,他似乎想打破字典合同,这可能暗示他的数据结构既不应该 be 也不应该 behave 像
Dictionary<_,_>/@ 987654335@,无法替代。 -
我同意上述所有 cmets,但我不同意原始 OP 所说的字典的键/值属性名称是“非直观的”。如果字典没有这些属性,我会有点困惑!我想知道他想用什么代替它们?
标签: c# .net dictionary