c# - 为什么比较每个 C# 字典键/值对给出不同的结果,而不是一次完成比较字典键和值?

标签 c# .net string dictionary equals

我目前不得不将一些数据放入字典中,以检查一些实际数据是否与我的一些测试的预期数据相匹配。

为了这个任务,我创建了一个看起来像这样的字典:

Dictionary<string, string> dict = new Dictionary<string, string>(){
    {a, a},
    {b, b},
    {c, c}
};
  1. 我尝试的第一个是比较条件语句中的字典值和键,如下所示,我对这个条件语句的错误结果感到有点惊讶:

    if(dict.Keys.Equals(dict.Values)) {
        ///// received false as a result here //////
    }
    
  2. 然后,当我尝试下一种方法,即遍历所有字典项目并比较它们的每个值键对时,它突然给我提供了字典所有项目的预期(真实)结果:

    foreach (var item in dict) {
    
        if (item.Key.Equals(item.Value))
        {
            ///// received true as a result /////
        }
        else { other code here }
    }
    

为什么我用第一种方法得到了错误的结果?

最佳答案

如果您查看 docs.

,您希望它们都是 ICollection

查看字典类的 reference sourceKeysValues 属性是使用不同的集合类型实现的。

    // Line 135
    public KeyCollection Keys {
        get {
            Contract.Ensures(Contract.Result<KeyCollection>() != null);
            if (keys == null) keys = new KeyCollection(this);
            return keys;
        }
    }

    // Line 157
    public ValueCollection Values {
        get {
            Contract.Ensures(Contract.Result<ValueCollection>() != null);
            if (values == null) values = new ValueCollection(this);
            return values;
        }
    }

此外,如果您查看 KeyCollectionValueCollection 类,您会注意到,Equals() 没有其他实现方法。由于这些类不是从任何其他类派生的,您可以确定 dict.Keys.Equals(dict.Values) 将调用 object.Equals() Method .

这个调用显然会返回 false。

关于c# - 为什么比较每个 C# 字典键/值对给出不同的结果,而不是一次完成比较字典键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490363/

相关文章:

c# - Visual Studio 搜索和替换行尾

c# - 将对象从大型 JSON 文件转换为 .NET 中对象的最快方法

.net - 如何使用 XAML 创建简单的 2D NURBS?

c++ - 如何从字符串中提取单词并将它们存储在 C++ 中的不同数组中

c++ - 有效地从文件的各个行中读取 token

c# - 使用 PowerShell Split 和正则表达式在正则表达式匹配后返回所有内容

c# - 如何使用 FileResult 下载文件?

c# - 从 OutOfMemoryException 中恢复

javascript - OnServerChange 事件未触发

python - 检查 'partial' 字符串列表是否在完整字符串列表中