예외가 발생할 수없는 경우 예외를 throw하고 처리해야합니까?

user5467760

세 개의 매개 변수 (일, 월 및 연도)를 사용하고 새 dateTime을 생성하는 함수가 있습니다. 세 개의 콤보 박스 중 하나가 드롭 다운 될 때 호출되는 공용 함수입니다.

단위 테스트를 할 때 실수로 잘못된 값을 입력하고 잘못된 날짜 시간 예외가 발생했지만 콤보 상자가 유효한 값으로 만 미리 채워져 있으므로 응용 프로그램에서는 불가능합니다.

그래서 질문은 여전히 ​​함수 에서이 예외를 확인하고 처리해야합니까?

스티브

일반적으로 모든 공용 함수는 어디에서나 호출 할 수 있으며 특정 시점에서 누가 함수에 입력을 제공하는지 확신하는 경우에도 유효하지 않은 입력으로부터 코드를 보호하는 것이 좋습니다.

그러나이 가정 된 함수는 입력이 좋지 않은 경우 예외를 트리거하지 않고 자체적으로 불가능한 상황을 처리 할 수 ​​있습니다.

입력을 확인하고 잘 알려진 TryParse 패턴을 따르는 것은 비교적 쉽습니다.

 public bool TryMakeDateTime(int year, int month, int day, out DateTime date)
 {
      date = DateTime.MinValue;

      if(!IsValidDay(year, month, day))
        return false;

      date = new DateTime(year, month, day);
      return true;
 }

 public bool IsValidDay(int year, int month, int day)
 {
     if(day < 1 || day > 31)
        return false;

     if(month < 1 || month > 12)
        return false;

     if(day > 30 && (month == 2 ||
                     month == 4 || 
                     month == 6 || 
                     month == 9 || 
                     month == 11))
        return false;

     // This is arbitrary, adjust the check to your constraints
     if(year < 1900 || year > 2099)
         return false;

     if(month == 2)
     {
         // IsLeapYear cannot handle values below 1 or higher than 9999
         // but we have already checked the year with more retrictive
         // constraints.
         int extraDay = (DateTime.IsLeapYear(year) ? 1 : 0);
         if(day > (28 + extraDay))
             return false;
     }
     return true;
 }

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

IO 예외가 발생하는 경우가 있습니까?

분류에서Dev

타이머 간격이 -1000 인 경우 예외를 어떻게 처리하고 수정해야합니까?

분류에서Dev

Mule에 사용할 수없는 경우 요청 페이로드를 변수에 매핑하면 예외가 발생합니다.

분류에서Dev

Ruby 해시에서 삭제, 값을 반환하고 키를 찾을 수없는 경우 예외 발생

분류에서Dev

루프 중에 예외가 발생하는 경우 : 예외를 전달하기 전에 중간 결과를 반환하는 방법은 무엇입니까?

분류에서Dev

예외가 발생할 때마다 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

키와 연관된 객체가없는 경우 어떤 예외가 발생해야합니까?

분류에서Dev

재정의 예외와 함께 사용하기 (λ)이 발생하는 경우 '예외를 throw하지 않습니다 오버라이드 (override) 방법'

분류에서Dev

필수 환경 변수가 누락 된 경우 어떤 예외가 발생해야합니까?

분류에서Dev

나는 경우 - 다른 블록에 예외를 발생할까요?

분류에서Dev

제약 위반 예외가 발생하는 경우

분류에서Dev

Null 포인터 예외가 발생하는 이유를 알 수 없습니다.

분류에서Dev

파일 경로를 언급하여 오브젝트 저장소에서 파일을 삭제할 수없는 것처럼 다중 배치 플로우를 실행하는 동안 예외가 발생합니다.

분류에서Dev

nullpointer 예외가 발생하는 JDBC에서 MySQL 저장 프로 시저를 실행할 수 없습니다.

분류에서Dev

위의 예외를 처리하는 동안 다른 예외가 발생했습니다. 'Date'

분류에서Dev

Flask-restful-위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

분류에서Dev

KeyError : '1'위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

분류에서Dev

매개 변수 중 하나가 Cypress를 사용하는 CLI 명령에 선언되지 않은 경우 예외가 발생합니까?

분류에서Dev

예외를 throw하지 않고 Path (file)을 사용할 수 없습니다.

분류에서Dev

ThreadPoolExecutor의 모든 작업 중 하나가 예외를 throw 할 수있는 경우 종료하는 방법

분류에서Dev

예외를 발생시키지 않아야하는 함수가 있습니까?

분류에서Dev

Java에서 실제로 메모리 부족 예외가 발생하는 경우는 언제입니까?

분류에서Dev

AngularJS는 Breeze로 변경 사항을 저장하려고 할 때 예외를 throw합니다.

분류에서Dev

이 함수에서 경계를 벗어난 예외가 발생하는 이유는 무엇입니까?

분류에서Dev

SpreadsheetApp.openById ()를 사용할 때 발생하는 예외를 어떻게 처리합니까?

분류에서Dev

쿼리가 SQL Server에서 예외를 throw하지만 MySQL에서는 예외가 발생하지 않음 (외부 참조 오류)

분류에서Dev

void 함수에서 포인터를 변경하려고 할 때 예외 발생

분류에서Dev

TensorFlow LlinearRegressor 예제가 경로 C : \ Users에 디렉터리를 생성하지 못하고 예외를 발생시키는 데 실패했습니다.

분류에서Dev

C ++를 사용하여 미로를 재귀 적으로 해결하고 예외적 인 경우를 처리 할 수 없습니다.

Related 관련 기사

  1. 1

    IO 예외가 발생하는 경우가 있습니까?

  2. 2

    타이머 간격이 -1000 인 경우 예외를 어떻게 처리하고 수정해야합니까?

  3. 3

    Mule에 사용할 수없는 경우 요청 페이로드를 변수에 매핑하면 예외가 발생합니다.

  4. 4

    Ruby 해시에서 삭제, 값을 반환하고 키를 찾을 수없는 경우 예외 발생

  5. 5

    루프 중에 예외가 발생하는 경우 : 예외를 전달하기 전에 중간 결과를 반환하는 방법은 무엇입니까?

  6. 6

    예외가 발생할 때마다 예외를 포착하는 방법은 무엇입니까?

  7. 7

    키와 연관된 객체가없는 경우 어떤 예외가 발생해야합니까?

  8. 8

    재정의 예외와 함께 사용하기 (λ)이 발생하는 경우 '예외를 throw하지 않습니다 오버라이드 (override) 방법'

  9. 9

    필수 환경 변수가 누락 된 경우 어떤 예외가 발생해야합니까?

  10. 10

    나는 경우 - 다른 블록에 예외를 발생할까요?

  11. 11

    제약 위반 예외가 발생하는 경우

  12. 12

    Null 포인터 예외가 발생하는 이유를 알 수 없습니다.

  13. 13

    파일 경로를 언급하여 오브젝트 저장소에서 파일을 삭제할 수없는 것처럼 다중 배치 플로우를 실행하는 동안 예외가 발생합니다.

  14. 14

    nullpointer 예외가 발생하는 JDBC에서 MySQL 저장 프로 시저를 실행할 수 없습니다.

  15. 15

    위의 예외를 처리하는 동안 다른 예외가 발생했습니다. 'Date'

  16. 16

    Flask-restful-위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

  17. 17

    KeyError : '1'위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

  18. 18

    매개 변수 중 하나가 Cypress를 사용하는 CLI 명령에 선언되지 않은 경우 예외가 발생합니까?

  19. 19

    예외를 throw하지 않고 Path (file)을 사용할 수 없습니다.

  20. 20

    ThreadPoolExecutor의 모든 작업 중 하나가 예외를 throw 할 수있는 경우 종료하는 방법

  21. 21

    예외를 발생시키지 않아야하는 함수가 있습니까?

  22. 22

    Java에서 실제로 메모리 부족 예외가 발생하는 경우는 언제입니까?

  23. 23

    AngularJS는 Breeze로 변경 사항을 저장하려고 할 때 예외를 throw합니다.

  24. 24

    이 함수에서 경계를 벗어난 예외가 발생하는 이유는 무엇입니까?

  25. 25

    SpreadsheetApp.openById ()를 사용할 때 발생하는 예외를 어떻게 처리합니까?

  26. 26

    쿼리가 SQL Server에서 예외를 throw하지만 MySQL에서는 예외가 발생하지 않음 (외부 참조 오류)

  27. 27

    void 함수에서 포인터를 변경하려고 할 때 예외 발생

  28. 28

    TensorFlow LlinearRegressor 예제가 경로 C : \ Users에 디렉터리를 생성하지 못하고 예외를 발생시키는 데 실패했습니다.

  29. 29

    C ++를 사용하여 미로를 재귀 적으로 해결하고 예외적 인 경우를 처리 할 수 없습니다.

뜨겁다태그

보관