【发布时间】:2012-07-28 07:32:45
【问题描述】:
是否可以在 C# 中创建一个由对象组成的字典,这样 Key 只是对字段值的引用(或者是 Value 的字段),所以它保证index == myDictionary[index].myField?
例如,想象一个标准的 C# Dictionary。假设我有Car 对象:
class Car {
string name;
int wheels;
double weight;
double horsepower;
double topSpeed;
// Appropriate constructors
}
我想存储在这个字典中,按名称索引:
var cars = new Dictionary<string, Car>();
var newCar = Car("Ford", 4, 2387.4, 4535.7, 128.2);
cars["Ford"] = newCar;
我的标准不能保证,因为我可以做到:
cars["Ford"].name = "not Ford";
而且条件被打破了。我可以简单地从Car 中删除name 字段,但是汽车本身不会知道它自己的名字——在这个时代,即使我们把性能成本放在一边,对于汽车来说这是一种尴尬的情况.
所以我的问题是:是否可以在 C# 中轻松制作哈希映射,使得哈希值始终等于哈希元素的某些部分,并且每当元素存在时更新哈希?
【问题讨论】:
-
hash is updated如果您已经存储在哈希表中......您建议这应该如何工作?听起来字典可能不是您想要的结构。 -
哈希对于任何对象都应该是不可变的。它必须基于定义对象身份的字段。在
Equals(object)方法中测试的相同。请勿更改哈希,否则将无法在字典中找到您的密钥。