我有一个函数,它接受一个控件作为参数,根据控件的类型(例如: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()
查找控件类型,根据该类型的字符串表示进行切换),而微软的代码分析工具告诉我要像这样使用 'as' 而不是 'is'(因为它在性能方面更好):
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.....
}
}
}
但我认为这个最后的解决方案过于冗长,不太实用阅读。 我希望能够直接打开控件类型,但是无法这样做而不使用字符串表示(我根本不喜欢),因为switch的情况语句不能包含变量。
那么从性能角度来看,真正的最佳方法是什么?在您的意见中,最佳方法是什么?(不一定是性能方面,例如“代码可读性”)
编辑:关于“为什么我使用一个通用函数而不是许多类型特定的方法”的主题,这里有更多信息:
我从我正在处理的应用程序的其他部分得到一个控制变量(类型=控件),我必须对此变量“做些什么”,这取决于它的类型。
所以基本上,我可以选择两种选项:要么我使用一个公共函数并在函数体中检查控件的类型,以便在某个时刻执行正确的代码部分(我现在选择的选项,但这可能会改变),或者在调用特定于类型的方法之前检查控件的类型。
无论如何,我都必须在某个时候切换控件的类型,这 是我的问题的主题(不管我对它做什么,如果我这样说的话)。