2010-11-10 65 views
2

下面的C#程序做什么,我希望,这是输出“第一”,“第二”,“第三”。但是,当我将Main中的foo类型更改为动态时,会引发一个异常,如下所示:为什么将类型更改为动态会导致我的C#代码引发异常?

“不能隐式地将类型'MyProgram.Program'转换为'System.Collections.IEnumerable'。缺少强制转换?)”

为什么改变类型的动态断裂这样的代码?

谢谢!

using System; 

namespace TestForEach 
{ 
class Program 
{ 
    private int idx = -1; 
    public Program GetEnumerator() { 
     return this; 
    } 
    public string Current 
    { 
     get { 
      string[] arr = { "First", "Second", "Third" }; 
      return arr[idx]; 
     } 
    } 

    public Boolean MoveNext() 
    { 
     return ++idx < 3; 
    } 

    static void Main(string[] args) 
    { 
     Program foo = new Program(); 
     foreach (var i in foo) 
     { 
      System.Console.WriteLine(i); 
     } 
     System.Console.ReadKey(); 
    } 
} 
} 

回答

0

我很惊讶它甚至编译。 Program类需要实现IEnumerable

+1

这是没有必要为一个类来实现'IEnumerable'为了一个实例在foreach循环使用。请参阅http://msdn.microsoft.com/en-us/library/dscyy5s0.aspx – drstevens 2011-11-22 19:57:34

1
相关问题