Ну, не удивительно, что вы не можете понять это, потому что это не имеет смысла:)
Прежде всего, похоже, что целью является проверка, является ли переданная дата «000000». Он также проверяет, все ли цифры на самом деле числовые. Было бы исключение, если бы они не были. Также будет исключение, если длина строки будет меньше 6.
Если дата «000000», по умолчанию будет «991231».
Это должно быть в основном эквивалентом, при условии, что num3
не используется для других странных сравнений:
int num3;
if (detailLastDate.Length != 6 || !Int32.TryParse(detailLastDate, out num3))
throw new FormatException("Invalid date");
if (num3 == 0)
detailLastDate = "991231";
Это также приведет к ошибке в слишком длинной строке (в отличие от вашего фрагмента кода), но я считаю, что это хорошо. Лично я бы избавился от целочисленного анализа вообще, но я думаю, что это работает:)
Если вы хотите провести рефакторинг надлежащим образом, взгляните на ответ CMS. Просто убедитесь, что окружающий код не основан на описанных мной побочных эффектах.