2008-10-12 2 views
10

분명히 뭔가 빠져있을 수도 있지만 .NET의 함수가 던진 예외와 예외가 throw 된 이유에 대한 참조가 있습니다..NET 기능에 의해 어떤 예외가 발생할 수 있는지 어떻게 알 수 있습니까?

예를 들어, 저는 최근 Visual C# 2008에서 Linq를 시험해보고 XDocument에 XML 파일을로드하고있었습니다. 테스트를 통해서만 존재하지 않는 파일을로드하려고하면 FileNotFound 예외가 발생하지만 파일 대신 디렉토리를로드하려고하면 UnauthorizedAccessException이 발생한다는 것을 깨달았습니다. 또한 System.IO 네임 스페이스를 살펴보면 FileLoad 예외 및 PathTooLongException과 같은 것을 볼 수 있습니다. 이러한 예외가 발생했을 때 추측 할 수 있지만 일부 상황에서는 throw 될 수있는 다른 것들이있을 수 있습니다. 아직 생각하지 못했습니다. .

내가 지금 가지고있는 유일한 해결책은 내가 아는 것들을 잡아 예외 유형을 잡는 것이다. 그러나 나는 어떤 유형의 예외가 정확하게 발생할지를 정확히 알 수있을 것이다. 그리고 왜. MSDN 라이브러리에 이런 유형의 정보가 있다고 생각했지만 어디서나 찾을 수는 없습니다. 나는 방금 눈이 멀었나요? 이 정보는 다른 곳의 정보입니까?

편집 : 좀 더 자세한 내용은, 지금은 XDocument.Load (문자열) 함수에 의해 던져 질 수있는 예외를 찾고 있어요. online documentation 또는 개체 브라우저에는 아무 관련이없는 것 같습니다. 이제 몇 가지 테스트를 실행하고 내가 뭘보고 있는지 알아야합니까?

답변

8

좋은 질문은 20/20 비전입니다. C#/.NET은 throws 문 (즉, 검사 예외)을 구현하지 않습니다.

Java와 같은 언어에서 온 사람이라면 누구나이 문제에 대해 궁금해 할 것입니다.

C#의 아버지 Anders Hejlsberg는 this article/interview에 C#에서 검사 예외를 남기는 근거를 설명합니다. 좋은 읽을 거리 야. 그 기사에서

는, 앤더스는 말합니다 :

내가 체크 된 예외에 대해 가지고있는 우려가 프로그래머에 넣어 수갑입니다. 프로그래머가 이러한 모든 throws 절이있는 새 API를 선택하고 코드가 어떻게 복잡하게 생성되는지 확인하면 확인 된 예외가 사용자를 돕지 못한다는 것을 알게됩니다. 예외 처리를 수행하는 방법을 알려주는 이러한 독재자 API 디자이너의 일종입니다. 그들은 그렇게해서는 안됩니다.

따라서 Mitch와 일산화탄소에서 말한 것처럼 .NET FCL 용 MSDN 설명서에는 각 클래스와 관련된 예외와 각 네임 스페이스 내에서 예외가 나열되어 있습니다.

+0

그 기사에 대한 링크를 포함 시키려고했으나 찾을 수 없습니다 - 좋은 읽을 거리예요. +1 –

+0

대학에서 자바를 사용하고 직장에서 C#을 사용하는 것으로부터 생각해 봅니다. 자바에서 가장 많이 빠진 것 중 하나라고 생각합니다. 물론 대학 때와 프로덕션 수준의 코드로 작업하기 전에 성가신, 나는 그것이 정말로 예외가 무엇을 기대하는지 아는 것이 도움이된다는 것을 안다. – Davy8

1

.NET에서는 java의 'throws'키워드와 같은 것을 구현하지 않으므로 온라인 MSDN 설명서를 확인하는 것이 가장 좋습니다.

EDIT : 네임 스페이스 doco (예 : System.IO)를 보면 가능한 예외를 나열합니다.

+0

함수가 자체 네임 스페이스가 아닌 예외를 throw 할 수 있기 때문에 모든 가능성이있는 것은 아닙니다. 예를 들어, ArgumentException 등 –

2

함수가 예외를 throw하면 일반적으로 오프라인 도움말 페이지의 맨 아래 또는 개체 브라우저에 나열됩니다. 온라인 MSDN 라이브러리 for example, string.Contains()에서 함수를 호출하는 방법에 대한 정보 바로 아래에 "예외"라는 레이블이 붙어 있습니다.

또한 실제로는 예외를 던지는 함수, 속성 등이기 때문에 일반 문서, 예제 에서처럼 실제로 던져 놓은 함수 나 접근 자에 대한 설명서에서만 다룰 수 있습니다. 주어진. 가장 좋은 방법은 VS에있는 객체 브라우저에서 관심있는 클래스를 찾아 보는 것입니다.

관련 문제