Мне бы пришлось подумать об этом больше о том, насколько мне это нравится ... мой инстинкт инстинктив, да, не так уж и много ...
РЕДАКТИРОВАТЬ: комментарии Райана Фокса об исключительном случае идеально, я согласен
Что касается производительности, то это зависит от индексатора коллекции. C # позволяет переопределить оператор индексатора, поэтому, если он выполняет цикл for, такой как метод contains, который вы бы написали, он будет таким же медленным (возможно, на несколько наносекунд медленнее из-за try / catch ... но ничего беспокоиться о том, что если сам код находится внутри огромного цикла).
Если индексатором является O (1) (или даже O (log (n)) ... или что-то более быстрое, чем O (n)), тогда решение try / catch будет быстрее, конечно.
Кроме того, я предполагаю, что индексатор выдает исключение, если он возвращает ноль, вы, конечно, можете просто проверить на ноль и не использовать try / catch.