この文をリファクタリングして条件を少なくするための最良の方法は何でしょうか?イムSomoneのは、私はコードを減らすために裸のminumum条件を使用する方法がある場合は文を少なくするためのコードをリファクタリングする
try
{
var errorProviders = new List<ErrorProvider>() { epEmail, epAlternative, epMobile, epTown, epLandline, epHouseName, epForeName, epSurname, epPostcode, epCountry, epHouseName, epLocality, epCounty };
foreach (Control c in panel1.Controls)
{
if (c is SpellBox || c is TextBox)
{
if (!string.IsNullOrWhiteSpace(txt_ForeName.Text) | !string.IsNullOrWhiteSpace(txt_SurName.Text))
{
if (cmb_Title.SelectedIndex != -1)
{
if (cmb_PrefConTime.SelectedIndex != -1)
{
if (isPhoneNumber())
{
if (errorProviders.Any(e => e.GetError(c).Length > 0))
{
return false;
}
}
else
{
epPrefConNumber.SetError(cmb_PrefConNumber, "Error");
return false;
}
}
else
{
epPrefConTime.SetError(cmb_PrefConTime, "Error in: prefered contact time feild");
return false;
}
}
else
{
epTitle.SetError(cmb_Title, "Title");
return false;
}
}
else
{
epBothNames.SetError(txt_SurName, "Error:");
epBothNames.SetError(txt_ForeName, "Error:");
return false;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString())+ "Error has occurred, Please cancel and try again!");
}
return true;
非常にgratefullだろう正しい方向に私を指すことができれば、同じ機能を持つことなく、この文をクリーンアップするreallt strucggling?
私の主な関心事は、実際には、条件内の深い単一の場所で 'c'を使用することだけです。一度ではなく、いつもそれらのすべてを評価するのはなぜですか? (私はまた、 "行の書式設定後のコード"に対して強く勧めたいが、それは別の問題だ...) –
@JonSkeet実際には3回使用される。 foreachの直下で初めて使用されています。 –
@MaxPlay:申し訳ありません、はい - foreachではなく、そのトップレベル内にあることを意味しました。私の悪い。 (しかし、型のテストと 'Any(e => e.GetError(c)) 'の呼び出しの間には' c'は含まれません)。 –