Вы ожидаете, что они оба будут ICollection
, если вы посмотрите на документы.
Загляните в справочный источник словарного класса.
Свойства Keys
и Values
реализованы с использованием различных типов коллекций.
// 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;
}
}
Также, если вы посмотрите на классы KeyCollection
и ValueCollection
, вы заметите, что нет другой реализации метода Equals()
. Поскольку эти классы не являются производными от какого-либо другого класса, вы можете быть уверены, что dict.Keys.Equals(dict.Values)
вызовет object.Equals()
Метод .
Этот вызов, очевидно, вернет false.