У меня есть функция, которая принимает элемент управления в качестве параметра и, в зависимости от типа элемента управления (например, TextBox, ComboBox, RadioButton и т. Д.), Выполняет код, зависящий от типа:
internal static void DoSomething(Control control)
{
if (control is Button)
{
// code for button
}
else if (control is CheckBox)
{
// code for CheckBox
}
else if (control is TextBox)
{
// code for TextBox
}
// etc.....
}
Мне интересно, если это лучший способ сделать.
Я знаю несколько других способов сделать то же самое (например: поиск типа элемента управления с помощью GetType()
, включение строкового представления этого типа), и инструмент анализа кода Microsoft говорит мне использовать «как» вместо «как», как это (потому что это лучше с точки зрения производительности):
internal static void DoSomething(Control control)
{
Button button = control as Button
if (button != null)
{
// code for button
}
else
{
CheckBox checkBox = control as CheckBox;
if (checkBox != null)
{
// code for CheckBox
}
else
{
TextBox textBox = control as TextBox;
if (textBox != null)
{
// code for TextBox
}
// etc.....
}
}
}
, но я считаю, что это последнее решение довольно многословно, а неочень практично читать.Я хотел бы иметь возможность напрямую включать тип элемента управления, но не могу этого сделать, не прибегая к использованию строкового представления (что мне совсем не нравится), поскольку оператор case переключателя не может содержать переменную.
Так что же на самом деле является лучшим способом повышения производительности?и какой, по вашему мнению, лучший способ сделать?(не обязательно с точки зрения производительности, но с точки зрения «читаемости кода»)
Редактировать: так как много происходит по вопросу «почему я использую одну общую функциюи не так много специфичных для типа методов ", вот еще некоторая информация:
Я получаю управляющую переменную из другой части приложения, над которым я работаю (type = Control), и я делаю" сделать что-то ""с этой переменной, в зависимости от ее типа.
так что в основном у меня есть выбор между 2 вариантами: либо я использую одну общую функцию и проверяю тип элемента управления в теле функции, чтобы выполнить правильную частькод в какой-то момент (параметры, которые я выбрал на данный момент, но это может измениться), или я проверяю тип элемента управления ДО вызова метода конкретного типа.
в любом случае, я должен включить элемент управлениявведите в какой-то момент, и ЭТО является предметом моего вопроса (независимо от того, что я с ним делаю, если можно так сказать).