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

Hos*_*Aly 5 .net c#

为什么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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试着踩到调试器但它没有进入X!yield break关键字是否会引起一些我不知道的副作用?

如果值得,我将使用Visual Studio 2008 Express和.NET 3.5 SP1.

Jar*_*Par 13

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;
    }
Run Code Online (Sandbox Code Playgroud)

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