2011-02-18 5 views
1

필자는 Linq을 사용하여 목록을 쿼리 할 때 유용한 경험이되고 간결하고 읽기 쉬운 코드를 제공합니다.Linq 쿼리의 예외를 처리하는 방법은 무엇입니까?

내가 발견 한 문제는 오류가 발생하면 쿼리의 어느 부분이 실패하는지 디버깅하기가 매우 어렵다는 것입니다.

찾을 수있는 방법이 있습니까? 전체 쿼리를 강조 표시하고 오류를 반환합니다. 분명히 널 (null) 검사

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 프로파일 러가 있습니까?

+0

의 중복 가능성 (http://stackoverflow.com/questions/ :


이 2010 Visual Studio에서 너무 어렵지 않다 4660142/what-is-a-nullreferenceex-in-net) –

+5

중복되지는 않습니다. – SLaks

+0

@ 존, dup,하지만 제목 오해의 소지가있다. 아마도 "NullReferenceException - 무엇이며 어떻게 피하는가?"로 변경되어야합니다. –

답변

4

Visual Studio에서 모든 예외를 중단하도록 설정할 수 있으며 예외가 발생하면 즉시 람다 내부에서 중단됩니다.

이렇게하면 미묘한 버그가 발견 될 수도 있습니다. I 매우 좋습니다.
그러나 예전의 예외적 인 코드의 경우 악몽이 될 것입니다.

+1

모든 예외에서 중단되도록 VS를 설정하려면 "디버그> 예외"로 이동하여 CLR 예외에 대한 "발생 된"확인란을 선택하십시오. –

-1
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 쿼리 및 람다 식과 다른 복잡한 식과 다를 바 없습니다. 그것을 분해하고 조각을 별도의 줄에 놓은 다음 정확히 끊어지는 줄을 찾으십시오. [? .NET에서 NullReferenceException이 무엇]

enter image description here

+3

고마워요 @ 존, 귀하의 요점을 주셔서 감사하지만, 그 경우에도 쿼리에 대한 여러 줄을 가지고, 예외는 직접 지적되지 않습니다. – Russell

+0

나는 이것이 복제물이라는 것에 대해 극단적 인 견해를 철회하는 것이 좋습니다. 아마 낮은 점수를 설명합니다. 진실은 * 대답 *이 중복이라 할지라도 * 질문 *이 절대적으로 아닙니다. 질문은 "NullReferenceException에 대해 무엇을해야합니까?"가 아니라 "예외가 Linq 쿼리에 묻힐 때 어떻게해야합니까?"입니다. "표준 디버깅 기술이 여기서 잘 작동합니다"라는 말에는 아무런 문제가 없지만, 비우호적 인 음질로 인해 품질이 떨어집니다. – EnvisionAndDevelop

+0

NullReferenceException의 출처를 찾기가 어려울 수있는 LINQ 쿼리에 대해 특별한 것이 없다는 것을 지적하는 데 "snark"가 표시되지 않습니다. 예를 들어 스크린 샷을 내놓으려고 너무 많은 노력을 기울이지 않았습니다. 나는 그것을 똑같이 제거 할 것이다. 또한 제목이 NullReferenceException보다 일반적인 질문이라는 것을 분명히하기 위해 제목을 변경했습니다. 즉, 디버깅 기술은 여전히 ​​동일합니다. –

관련 문제