2013-09-12 3 views
0

Компания, которая останется неназванной, имеет метод IFormsCollection.GetForms("ObjectIndex") || IFormsCollection.GetForms(0), который генерирует исключение, если форма не находится в коллекции. Это не IEnumerable<form> и требуется либо for(), либо .GetEnumerator() ->while(), чтобы получить каждый элемент в списке.Ловля исключения по сравнению с циклом по коллекции (менее глупый способ)

Вопрос в том, следует ли мне каждый раз перебирать коллекцию IForms? Мне нужно найти форму, которая не будет там в большинстве случаев, или просто пропустить цикл и предположить, выбрасывает ли исключение, которого там нет? Я бы предпочел не поддерживать вторую коллекцию, которая IENumerable для удобства поиска.

+1

'Не используйте исключения для нормального потока управления, если это возможно. 'From [Exception Throwing - MSDN] (http: // msdn. microsoft.com/en-us/library/vstudio/ms229030(v=vs.100).aspx) – Habib

+2

Не создавайте вторую коллекцию, создайте обертку вокруг этой коллекции, которая * делает * реализует IEnumerable –

+0

Обратите внимание, что вы все равно можете использовать объект в цикле 'foreach', если он не реализует' IEnumerable 'или' IEnumerable'. Спецификация требует только того, что у него есть метод «GetEnumerator», у возвращаемого типа которого есть свойство «Current» и метод MoveNext, возвращающий 'bool'. –

ответ

4

Исключения убивают производительность. Если вы хотите, вы могли бы зацикливаться, но это будет намного быстрее, если вы создадите словарь из этой коллекции с ключом, являющимся именем и значением, являющимся формой. затем просто выполните поиск словаря для ключа, и это будет намного быстрее и не будет исключений.

3

Не выбрасывайте исключения по назначению. Они не должны использоваться для нормального потока управления.