为什么比较每个C#Dictionary Key / Value对会产生不同的结果,而不是比较一次完成的Dictionary Keys和Values?

问题描述 投票:1回答:1

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

对于这个任务,我创建了一个看起来像这样的词典:

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. 然后,当我尝试下一个方法来迭代所有字典项并比较它们的每个Value Key对时,突然导致给出了所有Dictionary项的预期(真实)结果: foreach (var item in dict) { if (item.Key.Equals(item.Value)) { ///// received true as a result ///// } else { other code here } }

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

c# .net string dictionary equals
1个回答
3
投票

如果你看看ICollection,你期望他们都是docs.

看看字典类的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。

© www.soinside.com 2019 - 2024. All rights reserved.