Why does foreach fail to find my GetEnumerator extension method?

前端 未结 8 1971
暗喜
暗喜 2021-02-18 21:19

I\'m trying to make some code more readable. For Example foreach(var row in table) {...} rather than foreach(DataRow row in table.Rows) {...}.

8条回答
  •  南笙
    南笙 (楼主)
    2021-02-18 21:57

    The GetEnumerator method in your test class is not static, the extension method is. This doesn't compile either:

    class test
    {
    }
    
    static class x
    {
        public static IEnumerator GetEnumerator(this test t) { return null; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            foreach (var i in new test()) {  }
        }
    }
    
    

    In order for the foreach syntax sugar to work your class must expose a public GetEnumerator instance method.

    Edit:

    As of C# 9.0, GetEnumerator can be an extension method.

    提交回复
    热议问题