为什么将类型更改为动态会导致我的C#代码引发异常?

时间:2010-11-10 05:16:48

标签: c#-4.0

以下C#程序完成我的预期,即输出“First”,“Second”,“Third”。但是,当我将Main中的foo类型更改为dynamic时,会引发一个异常,说明:

“无法将类型'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();
    }
}
}

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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