Сегодня мне говорили, что одну функцию очень сложно разбить. Ну очень она сложная. Поэтому, понятно, там периодически валится эксепшен. В качестве борьбы даже предложили всё поупихивать во вложенные try-catch (которые будут вложены во вложенные for и if).
Послал, стал разбираться.
Вот один из перлов внутри мега-функции:
if (String.IsNullOrEmpty(ErrMsg))
{
for (int j = i + 1; j < m_data.SobesIncomeData.Length; j++)
{
if (!String.IsNullOrEmpty(m_data.SobesIncomeData[j].FIO) &&
(m_data.SobesIncomeData[i].FIO.ToUpper() == m_data.SobesIncomeData[j].FIO.ToUpper()))
if ((String.IsNullOrEmpty(m_data.SobesIncomeData[i].BirthDate) ||
String.IsNullOrEmpty(m_data.SobesIncomeData[j].BirthDate))
|| (m_data.SobesIncomeData[i].BirthDate == m_data.SobesIncomeData[j].BirthDate))
{
ErrMsg = CheckErrFIO(m_data.SobesIncomeData[j].FIO, (j + 1).ToString());
break;
}
}
}
А вот то, что отсюда вызывают:
private string CheckErrFIO(string FIO, string nRow)
{
return
"alert('Совпадают имена проживающих, и их даты рождения!');" +
"var rng = document.all.TFIO" + nRow +
".createTextRange(); rng.select(); document.all.TFIO" + nRow +
".focus();";
}
Если честно - не матерных слов нет. Лепить в итак сложной функции вложенные for и if-ы, чтобы вызвать оттуда функцию, которая всего-навсего возвращает строку - это жесть. И зачем такую функцию писать, когда есть String.Forma(string str, object[] args) - тоже не ясно.