Обработка исключений LINQ Iterator - PullRequest
5 голосов
/ 10 марта 2010
var trimmed = myStringArray.Select(s => s.Substring(0, 10));

Если длина одной из строк не будет 10 символов, я получу исключение ArgumentOutOfRangeException.

В этом случае выяснить это довольно тривиально, и я знаю, что могу сделать

s.Substring(0, Math.Min(10, s.Length))

С такими более сложными ошибками конструирования объектов, как это не всегда легко увидеть. Есть ли способ узнать, какая строка не была достаточно длинной с помощью обработки исключений?

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Создайте метод, который выполняет сложное преобразование, которое может генерировать исключения, и вызывать его из лямбды.напр.или оберните его в пользовательское исключение необходимой вам информацией.Не забывайте использовать просто 'throw', когда вы перебрасываете его, если это не пользовательское исключение.

Вы также можете поместить тело метода встроенным в лямбду: .Select(s => { ... return ...})

0 голосов
/ 10 марта 2010

В этом случае может быть уместно использовать условие Where, чтобы отфильтровать искомую длину:

var trimmed = myStringArray
        .Where( s => s.Length >= 10 )
        .Select( s => s.Substring( 0, 10 ) );

РЕДАКТИРОВАТЬ
Просто перечитайте вопрос, осознав, что OP ищет обработку исключений, чтобы увидеть, какие строки были недостаточно длинными. Предполагая, что вам все равно, какие строки достаточно длинные, предоставленное решение будет работать.

0 голосов
/ 10 марта 2010

Пока вы не собираетесь использовать его с LinqToSQL или EF, вы можете создать свой собственный метод расширения, который переносит исключение и сообщает вам значение строки.

...