세 개의 매개 변수 (일, 월 및 연도)를 사용하고 새 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] 삭제
몇 마디 만하겠습니다