using System.Collections.Generic;
public static void Main()
var myList = new List<int>()
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
var highList = myList.MyWhere(x => x > 5);
foreach (var num in highList)
Console.WriteLine("=====");
highList = myList.MyWhereBad(x => x > 5);
public static class Extensions
public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> source, Func<T, bool> predicate)
ArgumentNullException.ThrowIfNull(source);
ArgumentNullException.ThrowIfNull(predicate);
return _(); IEnumerable<T> _()
foreach (var item in source)
public static IEnumerable<T> MyWhereBad<T>(this IEnumerable<T> source, Func<T, bool> predicate) {
ArgumentNullException.ThrowIfNull(source);
ArgumentNullException.ThrowIfNull(predicate);
foreach (var item in source)