为什么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
| 归档时间: |
|
| 查看次数: |
2717 次 |
| 最近记录: |