c# throw 예제

예외 매개 변수를 사용하여 예외를 다시 throw하면 원래 예외가 보존되지 않고 새 예외가 만들어집니다. 다음 예제에서는 이를 보여 줍니다. 두 번째 예제에서 예외의 스택 추적을 재설정합니다. 첫 번째는 예외의 기원을 가장 정확하게 유지합니다. 또한 실제로 무엇이 잘못되었는지 아는 데 핵심인 원래 형식을 풀고 있습니다… 두 번째 기능이 필요한 경우 (예 : 확장 된 정보를 추가하거나 사용자 지정 `HandleableException`과 같은 특수 유형으로 다시 래핑하려면 InnerException 속성도 설정되어 있는지 확인하십시오! NB: 위의 코드는 InnerException 속성을 설정하는 예제로 제공됩니다. 포괄 을 사용하고 심각한 문제를 가릴 수 있으므로 새 예외를 throw하는 것은 좋지 않습니다. 쓰기 소프트웨어는 복잡한 사업이며, 심지어 최고의 소프트웨어가 다양한 문제와 함께 제공에 대한 매우 일반적이다. 때로는 잘못된 코드로 인해 문제가 발생하는 경우가 있습니다. 다른 경우 응용 프로그램 코드에서 설명되지 않은 잘못된 사용자 입력으로 인해 문제가 발생합니다.

문제의 원인에 관계없이 최종 결과는 응용 프로그램이 예상대로 작동하지 않는다는 것입니다. 이 시점에서 응용 프로그램에 오류가 발생했다고 가정합니다. .NET에서 실행 중인 응용 프로그램에 오류가 발생할 때 예외가 throw됩니다. 시스템 또는 응용 프로그램 제약 조건을 위반하는 상황이 발생하면 작업이 실패했다는 신호를 호출자에게 알리는 예외를 생성할 수 있습니다. 오류를 생성하고 시그널링하는 프로세스를 throw 예외라고 합니다. 이 작업은 throw 키워드다음에 System.Exception에서 파생된 클래스의 새 인스턴스를 사용하여 수행됩니다. 예를 들어 보겠습니다. 아래 코드로 새 콘솔 프로젝트를 만들고 Program.cs 업데이트합니다.

foo()가 IOException을 throw하면 [1] catch 블록이 예외를 catch합니다. 그러나 bar()가 IOException을 throw하면 [1] 캐치 블록에 의해 잡히지 않는 일반 예외 개미로 변환됩니다. System.Exception, System.SystemException, System.NullReferenceException 또는 System.IndexOutOfRangeException을 의도적으로 자체 소스 코드에서 throw하지 마십시오. 모든 예외에는 Message라는 속성이 포함됩니다. 이 문자열은 예외의 이유를 설명하도록 설정되어야 합니다. 보안에 민감한 정보는 메시지 텍스트에 넣어서는 안 됩니다. 메시지 외에도 인수예외에는 예외가 throw된 인수의 이름으로 설정해야 하는 ParamName이라는 속성이 포함되어 있습니다. 속성 세터의 경우 ParamName값을 설정해야 합니다.

공용 및 보호된 메서드는 의도한 함수를 완료할 수 없을 때마다 예외를 throw해야 합니다.