2010-11-26 39 views
0

我試圖將一組Dropdown控件作爲參數傳遞給以Control類型的集合作爲輸入的方法。執行時出現以下錯誤:將下拉集合發送到接受控件集合的方法時出錯

「無法投射類型爲'd__a3 1[System.Web.UI.WebControls.DropDownList]' to type 'System.Collections.Generic.IEnumerable 1 [System.Web.UI.Control]'的對象。」

任何想法,爲什麼我得到這個?

我的代碼:

private void Caller() 
{ 
    IEnumerable<DropDownList> dropDownControlsInCurrentRow = currentRow.Controls.OfType<DropDownList>(); 
    SetControlsVisibility(dropDownControlsInCurrentRow, false); 
} 

private void SetControlsVisibility(IEnumerable<Control> controlCollection, bool visibilityFlag) 
{ 
    foreach (ctrl in controlCollection) { 
     ctrl.Visible = visibilityFlag; 
    } 
} 
+0

是你的或者框架的'OfType`方法嗎?如果是你的,你可以爲此編寫代碼嗎?如果它來自框架,那麼`currentRow`的類型是什麼? – 2010-11-26 08:46:56

+0

^^它是IEnumerable擴展方法(內置)。 currentRow是GridViewRow類型。 – Dienekes 2010-11-26 08:53:06

回答

1

IEnumerable<Control> dropDownControlsInCurrentRow; 

IEnumerable<DropDownList> dropDownControlsInCurrentRow; 
1

在C#4.0上面的代碼將工作由於IEnumerable的的T逆變。

在C#3.5和下面你需要添加額外的dropDownControlsInCurrentRow.Cast()

請參閱此鏈接on contravariance更多信息使用,而不是

+0

^^好的,晚上會通過這篇文章.. – Dienekes 2010-11-26 10:04:32