을 잡기 위해 어떤 특정 예외를 알고하는 방법을예를 들어
try
{
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//throw;
}
이 일반적인 예외입니다. 어느 것이 언제 사용되는지 어떻게 알 수 있습니까? 당신이 당신의 try
블록에 무엇을하려는 지에 따라 달라집니다
을 잡기 위해 어떤 특정 예외를 알고하는 방법을예를 들어
try
{
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//throw;
}
이 일반적인 예외입니다. 어느 것이 언제 사용되는지 어떻게 알 수 있습니까? 당신이 당신의 try
블록에 무엇을하려는 지에 따라 달라집니다
How to know wich one to use and when ?
. SqlCommand
을 사용하여 일부 레코드를 검색 한 다음 SqlException
을 먼저 catch 한 다음 다른 레코드를 수신하려면 Exception
을 먼저 catch하는 것이 좋습니다.
try
{
using(SqlCommand cmd = new SqlCommand(....))
{
//........
}
}
catch (SqlException se)
{
//logging etc.
}
catch (Exception ex)
{
//logging etc
}
그냥 특정 첫째 예외 기본 Exception
로의 이동을 잡으려고 기억한다. 멀리까지 잡으려고 어떤 예외에 대한 귀하의 질문으로, 그들에 대해 확실하지 않을 수 있습니다 그 이유는 그들이 예외라고, 당신은 예측하고 그에 따라 잡을 수 있습니다.
@Downvoter, 게시물을 개선 할 수 있다면 기꺼이 될 것입니다. – Habib
downvoter가 아니지만 대부분의 사람들이 메서드에 대한 설명서를 읽음으로써 어떤 예외를 잡을 지 결정할 수 있다고 말하면서 향상시킬 수 있습니다) 그들이 부르고있는. 나는 누군가가 실제로이 친구의 질문에 대답했다고 확신하지는 않는다. 그러나 주로 나는 그가 그것을 잘 표현했는지 확신 할 수 없다. – trope
즉, 나는 그의 문제가 그가 SqlException이 존재하는지, 자신의 메서드 호출이 던져 질 수 있는지, SqlException이 잡히는 유효한 예외로 존재 하는지를 배우는 방법을 알지 못한다고 믿는다. catch 블록을 구조화하는 방법을 이해하지 못합니다. 나는 여기에서 틀릴 수있다, 그러나 그것은 나가 원래 질문을 읽는 방법이다. 또한 둘의 조합 일 수도 있습니다. – trope
많은 catch 블록을 정의 할 수 있습니다. Like :
try
{
var result = 8/0;
}
catch (DivideByZeroException ex)
{
// Here, a more specific exception is caught.
}
catch (Exception ex)
{
// Otherwise, you'll get the exception here.
}
구조화 된 예외 처리 (SEH)를 사용하고 싶습니다.
오류의 3 개 종류가 존재 당신이주의하는 것이 반드시 모두의첫째 : C#에서 SEH를 사용하는
그래서 당신이해야
우선 무엇이 예외 유형을 만들 수 있는지 이해해야합니다. 이 유형은 매우 신중하게 선택해야합니다.이 목적을 위해 FCL (Framework Class Library)에서 기존 유형 중 하나를 사용할 수 있지만, 예외 유형을 요구할 때 이러한 상황이 발생할 수 있습니다. 예를 들어 Input-Otput 클래스로 작업하는 경우 다음 예외 유형 중 하나를 사용할 수 있습니다 - System.IO.DirectoryNotFoundException, System.IO.DriveNotFoundException, System.IO.EndOfStreamException, System.IO.FileLoadException, System.IO.FileNotFoundException, System.IO.PathTooLongException, System.IO.PipeException
.
둘째, 예외 생성자로 보내지는 메시지를 선택해야합니다. 즉,이 예외가 언제 그리고 왜 만들어 졌는지, 메소드에서 자세한 정보를 찾을 수 있어야한다는 의미입니다.
또한 예외를 만드는 당신은 ExceptionType1
을 포함해야 EXCEPTION
이 ExceptionType2
및 ExceptionType1
및 ExceptionType2
을 포함해야 함을 유의하시기 바랍니다 다음 shablon 또한
void SomeMEthod(){
try
{
//your code to do
}
catch (ExceptionType1) //here put code with Exception 1
{
// you can add some specific code here for working with your exception
}
catch (ExceptionType2) //here put code with Exception 2
{
// you can add some specific code here for working with your exception
}
catch (EXCEPTION) //here put code with rest types of Exception
{
// you can add some specific code here for working with your exception
}
finally
{
//here put code that allow you to free your resourses
//NOTE: this code will be launched always!
}
//here you can placed code, that will be launched if no Exception will be found
}
을 사용할 수 있습니다 - 그렇지 - -이 일부 hierarhy를 사용하여 예외를 잡을 수 EXCEPTION
을 모든 예외를 잡을 것입니다.
또한 당신은 당신의 catch
블록에 키워드를 thow
를 추가 할 수 있습니다 - 이중 작업을 위해 기존의 예외 당신이 예외를 잡기위한 코드를 사용하는 경우 이해하는 것이 반드시 또한
catch (EXCEPTION) //here put code with rest types of Exception
{
// you can add some specific code here for working with your exception
throw;
}
로 - 당신이 할 수 있다는 것을 알고. 그래서 당신은 그것을 빼앗을 무언가를 만들 수 있습니다. 당신은 그런 식으로 코드를 만들어야합니다. 즉, try-catch-funally
을 가진 블록들의 q-ty는 프로그래머가 요구하는 것입니다.
C#의 예외 클래스에 대한 자세한 정보는 HERE입니다.
* 당신 *이 어떤 이유로 든 그들을 양육하지 않으면 확실히 알 수 없습니다. – Tigran
결코 그런 예외를 잡지 않습니다. Application.Exit() 실패는 올바르게 처리 할 수없는 조건입니다. –