为什么我的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
关键字是否会导致一些我不知道的副作用?
如果值得,我正在使用Visual Studio 2008 Express和.NET 3.5 SP1。
答案 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()方法作为应用程序的起始点。