Why is my X method below not being called?!
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; } }
I tried stepping into the debugger but it doesn’t enter X! Is the yield break keyword causing some side effect I am not aware of?
If it’s worth anything, I’m using Visual Studio 2008 Express with .NET 3.5 SP1.
X2 is an iterator and is delayed executed. It won’t be actually run until you attempt to get a value from the returned IEnumerable instance. You can fix this to get the behavior you are actually wanting by breaking the function up into 2 parts.
Eric has a great blog post on this subject: http://blogs.msdn.com/ericlippert/archive/2008/09/08/high-maintenance.aspx