代码之家  ›  专栏  ›  技术社区  ›  Hosam Aly

为什么我的C#方法没有被调用?

  •  4
  • Hosam Aly  · 技术社区  · 15 年前

    X 下面的方法没有被调用?!

    static class Program
    {
        private static void Main()
        {
           X((IEnumerable<int>)null);
        }
    
        public static IEnumerable<T> X<T>(IEnumerable<T> e)
        {
            if (e == null)
                throw new ArgumentNullException();
            yield break;
        }
    }
    

    X ! 是 yield break 关键词会引起一些我不知道的副作用吗?

    如果有什么价值的话,我正在使用VisualStudio2008Express和.NET3.5SP1。

    3 回复  |  直到 15 年前
        1
  •  13
  •   JaredPar    15 年前

    X2是一个迭代器,被延迟执行。在尝试从返回的IEnumerable实例获取值之前,它不会实际运行。您可以通过将函数分成两部分来修复此问题,以获得实际需要的行为。

       public static IEnumerable<T> X2<T>(IEnumerable<T> e)
       {
            if (e == null)
                throw new ArgumentNullException();
            return X2Helper(e);
        }
    
        private static IEnumerable<T> X2Helper<T>(IEnumerable<T> e)
        {
            yield break;
        }
    

    Eric在这方面有一篇很棒的博客文章: http://blogs.msdn.com/ericlippert/archive/2008/09/08/high-maintenance.aspx

        2
  •  1
  •   AnthonyWJones    15 年前

    是,在调用IEnumerable的GetEnumerator方法之前,不会调用该方法。

        3
  •  0
  •   sassafrass    15 年前

    Main()方法也需要是公共的。否则,其他程序集无法调用类的Main()方法作为应用程序的起点。