2010-08-09 68 views
0

我剛剛遇到了一個「bug」,下面的代碼。ASP.Net RadioButton控件繼承CheckBox

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」和「複選框東西」都爲RadioButton運行。

當步進通過並查看MSDN,這個錯誤現在很明顯,一個單選按鈕從複選框,而不是直接從WebControl的,因此既繼承if語句將返回true。

我發佈這個問題,雖然因爲我一直在ASP.Net編碼,因爲1.0是在測試版,這是一個完整的震動,我和我的團隊中的其他人。

雖然這是真的,一個單選按鈕確實有一個複選框的所有功能,我的「假設」是,這將是一個完全不同的控制。

這顯然「不是一個真正的問題」,多討論的焦點,因此我張貼的CW的。

回答

1

由於單選按鈕從複選框繼承,你可以簡單地改變你的if語句:

if(control is RadioButton) 
{ 
    //Do radiobutton stuff 
} 
else if(control is CheckBox) 
{ 
    //Do checkbox stuff 
} 
+0

的確,修復容易,職位是更多的認識到,單選按鈕從複選框繼承。 – 2010-08-09 14:19:32

0

這可能是更容易做到;而不是重新編碼都是一樣的邏輯,他們乾脆直接繼承和覆蓋渲染利用無線電按鈕...

啊,繼承的美麗,但是這也正是它可以是痛苦:-)

這將是最好的使用,如果elseif的..如果你只是想仍要運行一個條件;而不是每個條件都運行。有助於表現。