C# 列表作为字典键

标签 c# list dictionary containskey

我有一个以列表为键的字典:

private Dictionary<List<custom_obj>, string> Lookup;

我正在尝试使用 ContainsKey,但它似乎不起作用,我也不知道为什么。 这是我的 Visual Studio 即时窗口中的调试信息:

?Lookup.Keys.ElementAt(7)[0]
{custom_obj}
    Direction: Down
    SID: 2540
?Lookup.Keys.ElementAt(7)[1]
{custom_obj}
    Direction: Down
    SID: 2550
searchObject[0]
{custom_obj}
    Direction: Down
    SID: 2540
searchObject[1]
{custom_obj}
    Direction: Down
    SID: 2550
?Lookup.ContainsKey(searchObject)
false

以我的常识,最后一个 ContainsKey 应该是真的。希望我在这里包含了足够的信息……有什么想法吗?

谢谢!

最佳答案

List<custom_obj>作为键的实例在引用上不等于 searchObject 引用的实例。

如果您希望字典使用列表中的值而不是引用相等来查找匹配键,则必须在 constructor 中提供一个 IEqualityComparer字典(因为您不能在 List<T> 中覆盖 Equals 和 GetHashCode)。

关于C# 列表作为字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020541/

相关文章:

c# - c#中foreach循环内的线程

Python读取DOT格式的文件并返回城市名称列表

python pandas isin 方法?

Python BeautifulSoup 根据id提取标题

python - 如何从字典中制作一个漂亮的矩阵

optimization - 字典/客户端 VS 应用程序变量

c# - 在运行时在 Unity 中解析具有超过 65k 个顶点的网格

c# - 在服务中注入(inject)模拟的 dbContext - 集成测试

c# - 强制客户端在调用同一个类的第二个方法之前调用一个方法是一种不好的做法吗?

java - 列表中的 JTree<文件>