반응형
예외가 특정 유형인지 확인하는 방법
try catch 코드가 있습니다.
try
{
...
}
catch(Exception ex)
{
ModelState.AddModelError(
"duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique");
}
이 코드의 경우 데이터베이스에 레코드를 삽입하려고합니다. dba는 데이터베이스가 중복을 확인하고 중복이 있으면 오류를 반환하도록 설정했습니다. 현재 보시다시피 어떤 오류가 발생하더라도 동일한 오류를 모델에 추가하고 있습니다. dba에 의해 설정된 중복 오류로 인해 발생한 경우에만이 오류가 모델에 추가되도록 변경하고 싶습니다.
아래는 내가 잡으려는 오류입니다. 내부 예외에 있습니다. 누구든지 구체적으로 이것을 잡는 방법을 말해 줄 수 있습니까?
현재 캐치 전에 다음을 추가하십시오.
catch(DbUpdateException ex)
{
if(ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
}
C # 6에서 다음을 수행 할 수 있습니다.
catch(DbUpdateException ex) when (ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
교체 System.Threading.ThreadAbortException
하여 제외.
try
{
//assume ThreadAbortException occurs here
}
catch (Exception ex)
{
if (ex.GetType().IsAssignableFrom(typeof(System.Threading.ThreadAbortException)))
{
//what you want to do when ThreadAbortException occurs
}
else
{
//do when other exceptions occur
}
}
예외의 이름을 얻으려면 다음을 사용할 수 있습니다.
catch (Exception exc){
if (exc.GetType().FullName == "Your_Exception")
{
// The same can be user for InnerExceptions
// exc.InnerException.GetType().FullName
}
}
댓글을 작성할 담당자가 충분하지 않습니다. @conterio 질문에 대한 응답 (@Davide Piras 답변) :
catch "when not"구문이 있습니까?
있습니다.
catch (Exception e) when (!(e is ArgumentException)) { }
의미합니까
catch (Exception e){
if ( e.GetType() == XyzException)
//if (e.GetType().ToString() == "XyzException")
//if (e.GetType().Name == .....)
}
SQLException 클래스를 살펴보고 내부 예외에서 볼 수있는 내용이 포함되어있는 경우 예외 메시지의 내용을 확인할 수 있습니다.
try
{
//your code here
}
catch (SQLException ex)
{
if (ex.Message.Contains("Cannot insert duplicate key in obj...."))
{
//your code here
}
}
참고 URL : https://stackoverflow.com/questions/9270023/how-to-determine-if-an-exception-is-of-a-particular-type
반응형
'Program Tip' 카테고리의 다른 글
SqlAlchemy를 사용하여 ID로 데이터베이스를 쿼리하는 방법은 무엇입니까? (0) | 2020.11.04 |
---|---|
maven : 명령 줄 옵션 또는 env 변수를 사용하여 로컬 저장소의 위치를 재정의 할 수 있습니까? (0) | 2020.11.04 |
restTemplate을 사용하여 인증 헤더와 함께 GET 요청 보내기 (0) | 2020.11.04 |
Ansible은 Hudson / Jenkins와 같은 CI 도구를 대체합니까? (0) | 2020.11.04 |
원자에서`git commit`과`git push`를 어떻게 실행할 수 있습니까? (0) | 2020.11.04 |