我刚遇到以下代码的“bug”。
foreach(Control control in controls)
{
if(control is TextBox)
{
//Do textbox stuff
}
if(control is CheckBox)
{
//Do checkbox stuff
}
if(control is RadioButton)
{
//Do radiobutton stuff
}
}
错误是“radiobutton stuff”和“checkbox stuff”都在为RadioButton运行。
当单步执行并查看MSDN时,错误现在很明显,RadioButton继承自CheckBox,而不是直接从WebControl继承,因此两个if语句都将返回true。
我发布了这个问题,因为我已经在ASP.Net中进行了编码,因为1.0是在测试版中,这对我和我团队中的其他人都是完全的震撼。
虽然RadioButton确实具有CheckBox的所有功能,但我的“假设”是它本来是一个完全不同的控件。
这显然“不是一个真正的问题”而且更多的讨论点因此我发布为CW。
答案 0 :(得分:1)
由于RadioButton继承自CheckBox,您只需将if语句更改为:
即可if(control is RadioButton)
{
//Do radiobutton stuff
}
else if(control is CheckBox)
{
//Do checkbox stuff
}
答案 1 :(得分:0)
这可能更容易;而不是重新编码所有相同的逻辑,他们只是直接继承并覆盖渲染以使用单选按钮......
啊,继承的美丽,但这正是痛苦的地方: - )
如果您只想运行一个条件,最好使用if .. elseif;而不是运行每个if条件。有助于提高绩效。