public void Select_ExceptionThrownFromSelector_IteratorCanBeUsedAfterExceptionIsCaught()
{
int[] source = new[] { 1, 2, 3, 4, 5 };
Func<int, int> selector = i =>
{
if (i == 1)
throw new InvalidOperationException();
return i + 1;
};
var result = source.Select(selector);
var enumerator = result.GetEnumerator();
Assert.Throws<InvalidOperationException>(() => enumerator.MoveNext());
enumerator.MoveNext();
Assert.Equal(3 /* 2 + 1 */, enumerator.Current);
}