将List <string>转换为IEnumerator <string> </string> </string>

时间:2014-07-21 13:44:51

标签: c#

我无法弄清楚如何正确地做到这一点。我在代码的最后一行收到此错误。错误说:

  

“无法隐式转换类型   '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;

        }

我该如何解决这个问题?我是否需要以某种方式将返回值强制转换为其他类型?

3 个答案:

答案 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

进行迭代