6237 Programmering II (Csharp) Agenda/List sort/find/Sort with delegate
From Teknologisk videncenter
class Program
{
public static int SortByNavn(Person x, Person y)
{
return String.Compare(x.Navn, y.Navn);
}
public static int SortByEmail(Person x, Person y)
{
return String.Compare(x.Email, y.Email);
}
static void Main(string[] args)
{
Person p1 = new Person("Tommy", "tommys@mail.dk");
Person p2 = new Person("Jens", "jens@mail.dk");
Person p3 = new Person("Holger", "holgers@mail.dk");
List<Person> pLst = new List<Person>();
pLst.Add(p1);
pLst.Add(p2);
pLst.Add(p3);
pLst.Sort(SortByNavn);
pLst.Sort(SortByEmail);
}
}
På samme måde kan vi også anvende indbyggede søgefunktioner. Her skal vi lave en metode programmet kan anvende til at fortælle hvad der søges efter. I dette tilfælde navnet Jens.
class Program
{
String searchName;
static bool findName(Person p)
{
return p.Navn == searchName;
}
static void Main(string[] args)
{
Person p1 = new Person("Tommy", "tommys@mail.dk");
Person p2 = new Person("Jens", "jens@mail.dk");
Person p3 = new Person("Holger", "holgers@mail.dk");
List<Person> pLst = new List<Person>();
pLst.Add(p1);
pLst.Add(p2);
pLst.Add(p3);
searchName = "Jens";
Person p = pLst.Find(findName);
}
}
Hvis det skal være rigtig smart kan vi lave funktionen i vha en anden funktion. Her er det FindByName der returnerer en funktion der finder en navn.
class Program
{
static String searchName;
static bool findName(Person p)
{
return p.Navn == searchName;
}
static Predicate<Person> FindByName(String name)
{
return delegate(Person p)
{
return p.Navn == name;
};
}
static void Main(string[] args)
{
Person p1 = new Person("Tommy", "tommys@mail.dk");
Person p2 = new Person("Jens", "jens@mail.dk");
Person p3 = new Person("Holger", "holgers@mail.dk");
List<Person> pLst = new List<Person>();
pLst.Add(p1);
pLst.Add(p2);
pLst.Add(p3);
Person p = pLst.Find(FindByName("Holger"));
}
}