2017-02-04 2 views
0

Я знаю, что словарь не гарантирует, что порядок добавленных элементов сохраняется, я имею в виду, что после добавления многих элементов в словаре, если он пытается получить элемент с помощью метода elementAt (i) , Он может вернуть ожидаемый элемент.IDictionary свойства Exception.Data всегда сохраняет порядок?

Exception.Data - это IDictionary, поэтому мне было интересно, верно ли это в этом случае, потому что в документации на MSDN они используют foreach для перебора этого свойства, чтобы показать информацию, поэтому я предполагаю, что заказ хранится в этом случае.

Так что, в случае с Exception.Data, порядок добавляемых элементов сохраняется?

+0

'IDictionary' не гарантирует никакого заказа, но реализация' IDictionary' может это сделать. Насколько я вижу, реализация в .NET 4.x - это внутренний класс ListDictionaryInternal, который, насколько я вижу, использует связанный список, который сохраняет порядок. Тем не менее, при отсутствии документации, гарантирующей такое поведение, было бы неразумно полагаться на нее. – Joe

ответ

1

Ну ... если это:

//  Extra details: 
//  Key: 'stringInfo'    Value: Information from NestedRoutine2. 
//  Key: 'IntInfo'     Value: -903 
//  Key: 'DateTimeInfo'   Value: 7/29/2013 10:50:13 AM 
//  Key: 'ExtraInfo'    Value: Information from NestedRoutine1. 
//  Key: 'MoreExtraInfo'   Value: More information from NestedRoutine1. 

список всех ключа, что Exception.Data содержит, то почему это было бы дело, если они в порядке, когда вы можете просто сделать что-то например:

string[] exceptionList = { "stringInfo", "IntInfo", "DateTimeInfo", "ExtraInfo", "MoreExtraInfo" }; 
foreach (string exceptionName in exceptionList) { 
    if (myData.Exception.Data.ContainsKey(exceptionname)) { 
    // do something with that exception key/value pair 
    } 
}