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

时间:2009-03-06 16:39:51

标签: c# .net

为什么我的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;
    }
}

我尝试进入调试器,但它没有进入Xyield break关键字是否会导致一些我不知道的副作用?

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

3 个答案:

答案 0 :(得分: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;
    }

Eric有关于此主题的精彩博文:http://blogs.msdn.com/ericlippert/archive/2008/09/08/high-maintenance.aspx

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您的Main()方法也需要公开。否则,其他程序集不能调用类的Main()方法作为应用程序的起始点。