Lambda funksjoner
Eksempel 1
Vi skriver en filterfunksjon som plukker ut navn fra en liste basert på en alfabetisk sammenligning.
Func<string, string, bool> filter = (s, t) => s.CompareTo(t) > 0; private void buttonStrings_Click(object sender, EventArgs e) { string[] names = { "Arnold","Berit","Hans", "Jens", "Sverre", "Harald", "Hanne", "Marit"}; IEnumerable<string> expr = from s in names where filter(s, "Hanne") orderby s select s; listBox1.Items.Clear(); foreach (string item in expr) listBox1.Items.Add(item); }
Eksempel 2
Vi skriver en filterfunksjon som plukker ut objekter fra en liste basert på sammenligning av alder.
Func<person, int, bool> pfilter = (p, age) => p.Age > age; private void buttonObjects_Click(object sender, EventArgs e) { person[] plist = {new person("ole",1990), new person("jens",2005), new person("kari",1996) }; IEnumerable<person> expr = from p in plist where pfilter(p, 10) orderby p.Age select p; listBox1.Items.Clear(); foreach (person item in expr) listBox1.Items.Add(item.Name); }
personklassen er slik:
public class person { String name; int faar; public person(String n, int f) { name = n; faar = f; } public int Age { get { return DateTime.Now.Year - faar; } } public string Name { get { return name; } } }
Eksempel 3
Vi skriver en filterfunksjon som plukker ut deltagere i olympiader basert på distanse. Datagrunnlaget er en XML-fil beskrevet i modulen Noen datasett.
Func<XElement, String, bool> ofilter = (p, distance) => ((XElement)p.Parent).Attribute("dist").Value.CompareTo(distance) == 0; private void buttonXML_Click(object sender, EventArgs e) { XDocument xdoc = new XDocument(); xdoc = XDocument.Load( "http://www.it.hiof.no/~borres/commondata/olympiade/all_results.xml" ); List<XmlNode> athletList = new List<XmlNode>(); var runners = from a in xdoc.Descendants("athlet") where ofilter((XElement)a, "100m") select new { theName = a.Element("name").Value, theResult = a.Element("result").Value }; listBox1.Items.Clear(); listBox1.DisplayMember = "theName"; foreach (var runner in runners) listBox1.Items.Add(runner); }