Наличие if
и switch
утверждений - это не плохо.Даже выполнение некоторой элементарной проверки типов не обязательно является плохой вещью, особенно когда используемые типы не могут быть использованы полиморфно.Выражение этой логики более одного раза вызывает нарекания, потому что вы повторяете себя, и у вас есть несколько точек обслуживания для одного и того же изменения.
В исходном фрагменте кода вы делаете
var blah = obj as Foo;
if (blah != null)
{
someList.Add(blah.Value);
}
И повторяете это для нескольких других типов элементов управления.Но потом в вашем частном методе вы в основном использовали ту же логику, выраженную столько же раз.
var blah = obj as Foo;
if (blah != null)
return blah.Value;
Единственное отличие состоит в том, что в первом фрагменте вы берете значение и добавляете его в список.Во втором вы возвращаете значение.Первый фрагмент должен убрать с его логикой проверки типов, он должен использовать логику, уже выраженную в другом методе.
foreach (var control in childControls)
{
listOfValues.Add(GetControlValue(control));
}
Идея в том, что не повторяйся. СУХОЙ.