using System;
using System.Collections.Generic;
namespace TestFilter
{
static class Program
{
static void Main(string[] args)
{
// Add a whole bunch of names
FilteredList list = new FilteredList();
list.Add("Anne");
list.Add("Brian");
list.Add("Pieter");
list.Add("Wayne");
list.Add("Shane");
list.Add("Susan");
list.Add("Xavier");
// There whould be 7
Console.WriteLine(list.Count);
// Use a public function to filter the list
FilteredList filteredList = list.Filter(list.FilterFunction);
//There should only be 2 stating with 'S'
Console.WriteLine(filteredList.Count);
foreach (string name in filteredList)
{
Console.WriteLine(name);
}
// Use one version of a lambda expression
FilteredList filteredList2 = list.Filter(item => { return item.StartsWith("A"); });
// Only one starting with 'A'
Console.WriteLine(filteredList2.Count);
foreach (string name in filteredList2)
{
Console.WriteLine(name);
}
// A better/shorter version of the previous lambda? Definately cleaner
FilteredList filteredList3 = list.Filter(item => item.StartsWith("Pi"));
// Only one starting with 'Pi'
Console.WriteLine(filteredList3.Count);
foreach (string name in filteredList3)
{
Console.WriteLine(name);
}
Console.ReadLine();
}
}
public class FilteredList : List<string>
{
public bool FilterFunction(string item)
{
return item.StartsWith("S");
}
public FilteredList Filter(Func<string, bool> condition)
{
FilteredList filteredList = new FilteredList();
foreach (string item in this)
{
if (condition(item))
{
filteredList.Add(item);
}
}
return filteredList;
}
}
}