将类型“System.Collections.IEnumerator”转换为“System.Collections.Ge

本文关键字:System Collections Ge 转换 IEnumerator 类型 | 更新日期: 2023-09-27 18:12:33

我有以下代码:

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

我收到指定我的编译错误

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

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

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

我得到一个运行时错误。

有什么想法吗?

将类型“System.Collections.IEnumerator”转换为“System.Collections.Ge

row.Cells.GetEnumerator()返回一个IEnumerator,但您正试图将其分配给一个无法执行的IEnumerator<DataGridViewCell>,结果出现异常。在它前面添加(IEnumerator<DataGridCell>)没有帮助,因为它仍然是一种不同的类型。

要实现这一点,请在之前使用.Cast

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

IMO更好的选择是使用IEnumerable<DataGridCell>:

IEnumerable<DataGridCell> cells = row.Cells.Cast<DataGridViewCell>();

请先尝试使用强制转换运算符。

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

对于那些在家里跟随的人:

var able = (IEnumerable)new List<String>();
IEnumerator<String> tor = able.Cast<String>().GetEnumerator();

我不明白为什么OP想要IEnumerator而不是IEnumerable(事实上,我怀疑他用后者可能会更好(,但这是他问的问题。

相关文章: