将类型`System.Collections.IEnumerator`转换为`System.Collections.Generic.IEnumerator`

时间:2016-10-11 19:33:13

标签: c# .net

我有以下代码:

// row is a DatGridViewRow object
IEnumerator<DataGridCell> cells = row.Cells.GetEnumerator();

我收到编译错误,指定我

  

无法将System.Collections.IEnumerator类型隐式转换为   System.Collections.Generic.IEnumerator

我需要做一个明确的演员表。当我尝试通过。

IEnumerator<DataGridCell> cells = (IEnumerator<DataGridCell>)row.Cells.GetEnumerator();

我遇到了运行时错误。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

case class Car(brandName: String) object Car { implicit val mapping = CaseClassMapping.mapping[Car] } case class User(name: String, car: Car) object User { implicit val mapping = CaseClassMapping.mapping[User] } val userForm = Form(implicitly[Mapping[User]]) 会返回row.Cells.GetEnumerator(),但您尝试将其分配给无法完成的IEnumerator并获得例外。在它前面添加IEnumerator<DataGridViewCell>将无济于事,因为它仍然是一个不同的类型。

要在之前使用(IEnumerator<DataGridCell>)

.Cast

IMO更好的选择是使用IEnumerator<DataGridCell> cells = row.Cells.Cast<DataGridViewCell>().GetEnumerator();

IEnumerable<DataGridCell>

答案 1 :(得分:2)

首先尝试使用强制转换操作符。

IEnumerator<DataGridCell> cells = row.Cells.Cast<DataGridCell>().GetEnumerator();

答案 2 :(得分:1)

IEnumerator<DataGridCell> cells = row.Cells.Cast<DataGridCell>().GetEnumerator();

对于那些跟在家里的人:

var able = (IEnumerable)new List<String>();

IEnumerator<String> tor = able.Cast<String>().GetEnumerator();

打败我为什么OP想要IEnumera tor 而不是IEnumera ble (事实上我怀疑他可能会更好地使用后者),但这就是他问的问题。