Ну, вы могли бы использовать Enumerable.ElementAt
, если бы вам действительно пришлось, но вы не должны ожидать, что заказ будет стабильным или значимым. Или позвоните ToArray
или ToList
, чтобы получить копию.
Обычно вы используете Values
, только если собираетесь их перебирать. Что именно вы пытаетесь сделать здесь? Вы понимаете, что порядок записей в Dictionary<,>
не определен?
РЕДАКТИРОВАТЬ: Похоже, вы хотите что-то вроде:
var equal = dict1.Count == dict2.Count &&
dict1.Keys.All(key => ValuesEqual(key, dict1, dict2));
...
private static bool ValuesEqual<TKey, TValue>(TKey key,
IDictionary<TKey, TValue> dict1,
IDictionary<TKey, TValue> dict2)
{
TValue value1, value2;
return dict1.TryGetValue(out value1) && dict2.TryGetValue(out value2) &&
EqualityComparer<TValue>.Default.Equals(value1, value2);
}
РЕДАКТИРОВАТЬ: обратите внимание, что это не так быстро, как могло бы быть, потому что он выполняет поиск в обоих словарях. Это было бы более эффективным, но менее элегантным ИМО:
var equal = dict1.Count == dict2.Count &&
dict1.All(pair => ValuesEqual(pair.Key, pair.Value, dict2));
...
private static bool ValuesEqual<TKey, TValue>(TKey key, TValue value1,
IDictionary<TKey, TValue> dict2)
{
TValue value2;
return dict2.TryGetValue(out value2) &&
EqualityComparer<TValue>.Default.Equals(value1, value2);
}