Итак, у меня есть следующие методы:
public class Person
{
public string FirstName { get; set; }
public int Age { get; set; }
}
public delegate bool filterDelegate(Person person);
public class Program
{
static void Main(string[] args)
{
Person p1 = new Person { FirstName = "Niels", Age = 10 };
Person p2 = new Person { FirstName = "Margo", Age = 14 };
Person p3 = new Person { FirstName = "Henkie", Age = 15 };
Person p4 = new Person { FirstName = "Jan", Age = 16 };
Person p5 = new Person { FirstName = "Jaco", Age = 20 };
Person p6 = new Person { FirstName = "Rein", Age = 5 };
List<Person> people = new List<Person>() { p1, p2, p3, p4, p5, p6 };
DisplayPeople("children", people, IsChild);
DisplayPeople("Pubers", people, isPuber);
DisplayPeople("Adults", people, isAdult);
Console.ReadKey();
}
static void DisplayPeople(string title, List<Person> people, filterDelegate filter)
{
Console.WriteLine(title);
foreach (var item in people)
{
if(filter(item))
Console.WriteLine("{0}, {1} years old", item.FirstName, item.Age);
}
Console.WriteLine("\n\n");
}
//Filters:
static bool IsChild(Person person)
{
return person.Age <= 10;
}
static bool isPuber(Person person)
{
return person.Age > 10 && person.Age < 18;
}
static bool isAdult(Person person)
{
return person.Age >= 18;
}
}
И, как вы видите, он использует объект делегата. Но теперь, для моего собственного понимания, я хочу написать это без объекта делегата.
Итак, я пробую это так:
public class Person
{
public string FirstName { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { FirstName = "Niels", Age = 10 };
Person p2 = new Person { FirstName = "Margo", Age = 14 };
Person p3 = new Person { FirstName = "Henkie", Age = 15 };
Person p4 = new Person { FirstName = "Jan", Age = 16 };
Person p5 = new Person { FirstName = "Jaco", Age = 20 };
Person p6 = new Person { FirstName = "Rein", Age = 5 };
List<Person> people = new List<Person>() { p1, p2, p3, p4, p5, p6 };
DisplayPeople()...
}
static void DisplayPeople(string title, List<Person> people)
{
Console.WriteLine(title);
foreach (var item in people)
{
Console.WriteLine($"{item.FirstName}, ${item.Age} years old");
}
}
static bool IsChild(Person person)
{
return person.Age <= 10;
}
static bool isPuber(Person person)
{
return person.Age > 10 && person.Age < 18;
}
static bool isAdult(Person person)
{
return person.Age >= 18;
}
}
Но как теперь использовать метод DisplayPeople ()? Там я застрял. Итак, что вам нужно сделать, если вы хотите получить выходные данные трех методов фильтра без делегата?
Спасибо