将下拉集合发送到接受控件集合的方法时出错

时间:2010-11-26 08:43:00

标签: c# asp.net linq generics extension-methods

我正在尝试将一组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;
   }
}

2 个答案:

答案 0 :(得分:1)

在C#4.0中,由于IEnumerable中T的逆转,上述代码将起作用。

在C#3.5及以下版本中,您需要添加一个额外的dropDownControlsInCurrentRow.Cast()

有关详细信息,请参阅此链接on contravariance

答案 1 :(得分:1)

使用

IEnumerable<Control> dropDownControlsInCurrentRow;

而不是

IEnumerable<DropDownList> dropDownControlsInCurrentRow;