در مورد متد IsValidDate مقايسه دوم day>31 لزومي ندارد چرا كه تو دستور if قبلي اين مقايسه انجام شده اين مطلب در مورد مقايسه دوم day>30 هم صادقه.
public Boolean IsValidDate(String date)
{
if (!IsFullDate(date))
date = FullDate(date);
if (date.Length < 10)
throw new InvalidDateException("تاریخ وارد شده معتبر نیست");
int year = int.Parse(date.Substring(0, 4), CultureInfo.InvariantCulture);
int month = int.Parse(date.Substring(5, 2), CultureInfo.InvariantCulture);
int day = int.Parse(date.Substring(8, 2), CultureInfo.InvariantCulture);
if (year < 0 || month > 12 || month < 0 || day < 0 || day > 31)
return false;
if (month <= 6 && day > 31)
return false;
if (month >= 7 && day > 30)
return false;
if (month == 12 && day > 29)
if (!pcMydate.IsLeapYear(year))
return false;
else
if (day > 30)
return false;
return true;
}
كد بهينه شده
public Boolean IsValidDate(String date)
{
if (!IsFullDate(date))
date = FullDate(date);
if (date.Length < 10)
throw new InvalidDateException("تاریخ وارد شده معتبر نیست");
int year = int.Parse(date.Substring(0, 4), CultureInfo.InvariantCulture);
int month = int.Parse(date.Substring(5, 2), CultureInfo.InvariantCulture);
int day = int.Parse(date.Substring(8, 2), CultureInfo.InvariantCulture);
if (year < 0 || month > 12 || month < 0 || day < 0 || day > 31)
return false;
//if (month <= 6 && day > 31) مقايسه تكراري
// return false;
if (month >= 7 && day > 30)
return false;
if (month == 12 && day > 29)
if (!pcMydate.IsLeapYear(year))
return false;
//else
// if (day > 30) مقايسه تكراري
// return false;
return true;
}
البته اين باگ نيست، فقط اين تغييرات باعث بهينه شدن كد ميشه.