例:あるコレクションからのデータの部分集合を得る
int threshold = ComputeThreshold(); var heavyTravellers = new List<Employee>(); foreach (Employee e in employeeList) if (e.MilesOfCommute > threshold) heavyTravellers.Add(e);
var managerList = new List<Employee>(); foreach (Employee e in employeeList) if (e.IsManager) managerList.Add(e);
class MyList<T> { private List<T> contents; public MyList(List<T> contents) { this.contents = contents; } public List<T> Select(FilterFunction<T> p) { var result = new List<T>(); foreach (T candidate in contents) if (p.Passes(candidate)) result.Add(candidate); return result; } } interface FilterFunction<T> { Boolean Passes(T arg); }
var managers = new MyList<Employee>(employeeList).Select(new ManagersPredicate()); class ManagersPredicate : FilterFunction<Employee> { public Boolean Passes(Employee e) { return e.IsManager; } }
var threshold = ComputeThreshold(); var heavyTravellers = new MyList<Employee>(employeeList). Select(new HeavyTravellerPredicate(threshold)); class HeavyTravellerPredicate : FilterFunction<Employee> { private int threshold; public HeavyTravellerPredicate(int threshold) { this.threshold = threshold; } public Boolean Passes(Employee e) { return e.MilesOfCommute > threshold; } }
var threshold = ComputeThreshold(); var heavyTravellers = employeeList.FindAll(delegate(Employee e) { return e.MilesOfCommute > threshold; });
var threshold = ComputeThreshold(); var heavyTravellers = employeeList.FindAll(e => e.MilesOfCommute > threshold);