gpt4 book ai didi

c# - 键为 List 的字典如何运行?

转载 作者:行者123 更新时间:2023-11-30 19:56:06 26 4
gpt4 key购买 nike

我正在处理遗留代码,我看到一个字典,其键是一个对象列表...

var myCrazyDictionary = new Dictionary<List<MyKeyObject>, List<MyValueObject>>();

这样的字典有何表现?你知道,因为引用类型...

它像这样神奇地工作吗?

// ????
myCrazyDictionary.Add(new List<MyKeyObject> { new MyKeyObject { Key1 = "1", Key2 = 2 } }, new List<MyValueObject> { new MyValueObject { Value = "!" } });

// ???????????
var result = myCrazyDictionary[new List<MyKeyObject> { new MyKeyObject { Key1 = "1", Key2 = 2 } }];
// Will this hold the value: "!" or crash or something else?
var byWhatBlackMagic = result[0].Value;

最佳答案

它会和你做字典一样Dictionary<Object, List<MyValueObject>>刚刚做了一个new Object()用于添加和检索。 List<T>不会覆盖 Equals(object)GetHashCode()所以它只使用只比较对象引用的默认行为。它不会在列表内部进行比较。所以你的例子会抛出 KeyNotFoundException当你尝试做 myCrazyDictionary[new List<MyKeyObject> { ... }]因为您正在创建一个“新对象”,而该新对象不在字典中(因为您刚刚创建了它)。

你可以得到你想要的功能,你只需要做一个自定义IEqualityComparer<List<MyKeyObject>>并将其传递给字典的构造函数。

注意! 如果您确实在 List<MyKeyObject> 中没有设置自定义比较器与您的自定义关联 Equals(List<MyKeyObject>, List<MyKeyObject>)也不是你的习惯.GetHashCode(List<MyKeyObject>)可以在它作为按键滚动时进行更改,否则您将破坏 Dictionary 的内部逻辑。 .

关于c# - 键为 List 的字典如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com