Как справиться с исключениями в Linq Queries? - PullRequest
1 голос
/ 18 февраля 2011

Я обнаружил, что использование Linq полезно при работе со списками и предоставляет краткий читабельный код.

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

Есть ли способ выяснить это?Он просто выделяет весь запрос и возвращает ошибку.

Например, если у меня есть список:

class Person
{
    public IList<string> Pets
    {
        // please, don't do this at home :)
        get { throw new InvalidOperationException(); }
    }
}

Person person = new Person();

List<Person> myStrings = new List<Person>();
myStrings.Add(person);

var people = from p in myStrings
             where p.Pets.Count > 0
             select p;

Очевидно, что проверка на ноль - это простое решение, но для более запутанных ошибок, которыетакже может быть не так очевидно, как мы должны определить, где в запросе происходит сбой?

Есть ли в Linq профилировщик или что-то еще?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Вы можете настроить Visual Studio на разрыв всех исключений, и он будет прерываться, как только возникнет исключение, внутри вашей лямбды.

Это также может выявить тонкие ошибки; Я очень рекомендую.
Однако для старого кода, загруженного исключениями, это будет кошмар.

0 голосов
/ 18 февраля 2011
Person person = new Person();
person.Pets = null;

List<Person> myStrings = new List<Person>();
myStrings.Add(person);

var people = from p in myStrings
             let pets = p.Pets
             where pets != null && pets.Count > 0
             select p;

Извините, если люди не думают, что это дубликат.Это так.

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


Это не слишком сложно в Visual Studio 2010:

enter image description here

...