我无法弄清楚如何正确地做到这一点。我在代码的最后一行收到此错误。错误说:
“无法隐式转换类型 'System.Collections.Generic.List to 'System.Collections.Generic.IEnumerator'。一个明确的 转换存在(您是否错过了演员?)
以下是该功能的代码:
public IEnumerator<string> AddElementsAttributesRemoveElementsAttributes()
{
List<string> retval = new List<string>();
try
{
success = false;
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
return retval;
}
我该如何解决这个问题?我是否需要以某种方式将返回值强制转换为其他类型?
答案 0 :(得分:4)
要将列表实际返回为IEnumerator<string>
,请执行以下操作:
return retval.GetEnumerator();
但是,将IEnumerable<string>
作为IEnumerable
返回会更有意义,在这种情况下,您必须更改方法签名以指定IEnumerator
而不是IEnumerator
。
IEnumerable
只能迭代一次,而{{1}}可以迭代多次,这就是为什么我认为你可能想要后者。但如果没有,请更改您的退货声明。
答案 1 :(得分:3)
List<T>
实施IEnumerable<T>
,但不是IEnumerator<T>
。 Enumerable可以创建一个Enumerator,它不是一个。
虽然您可以向List
询问一个枚举器,然后返回,但这样做几乎肯定不是您想要做的。在整个C#中传递Enumerable对象而不是Enumerator对象是惯用的,并且只在最后一刻使用Enumerator,通常让foreach
循环为你做实际的迭代。 foreach
循环可以接受IEnumerable
而不是IEnumerator
的事实是这种做法的主要原因。
如果将方法的返回类型更改为IEnumerable<string>
,则返回类型将是List<string>
实现的类型,因此它将是可隐式转换的,并且此方法中不会有其他更改需要的。
答案 2 :(得分:1)
你可以试试这个:
public IEnumerable<string> AddElementsAttributesRemoveElementsAttributes()
而不是
public IEnumerator<string> AddElementsAttributesRemoveElementsAttributes()
您可以重复IEnumerable
次,但无法使用IEnumerator