c# - Dictionary<myField, myObject> 其中 myField 是 myObject 的成员

标签 c# hash hashmap

是否可以在 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# 中轻松制作 HashMap ,使哈希的值始终等于哈希元素的某些部分,并且只要元素是,哈希就会更新?

最佳答案

您正在描述 KeyedCollection类,但如果在将项目添加到集合后更改项目的键,就会遇到问题。

如果您想要一个哈希集合来处理对其元素标识属性的更改,您可以在类型(在您的示例中为 Car)上实现 INotifyPropertyChanged,并让集合重新定位项目(或删除并根据需要重新添加它们)。这将是低效的,而且极易出现错误。

关于c# - Dictionary<myField, myObject> 其中 myField 是 myObject 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724776/

相关文章:

Java:如何使用 Map<String,String> 填充文本中的占位符?

java - 在反射中处理 HashMap

c# - 如何在 C# 中将参数默认为 Guid.Empty?

arrays - 使用 Ruby 合并基于相似位置的数组哈希

c# - 将 textbox.text 值与 SQL Server 中的值进行比较

php - 裁剪后的哈希更难破解吗?

ruby-on-rails - Rails 如何显示 JSON 请求的哈希值

java - Json 字符串到 map 的转换,

c# - Selenium 无法通过 xpath 按文本查找元素

c# - 使用Emgu-CV捕获视频时尝试读取或写入 protected 内存