我正在尝试将一组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 :(得分:1)
在C#4.0中,由于IEnumerable中T的逆转,上述代码将起作用。
在C#3.5及以下版本中,您需要添加一个额外的dropDownControlsInCurrentRow.Cast()
有关详细信息,请参阅此链接on contravariance
答案 1 :(得分:1)
使用
IEnumerable<Control> dropDownControlsInCurrentRow;
而不是
IEnumerable<DropDownList> dropDownControlsInCurrentRow;