Стратегия проектирования шаблонов делегатов задачи c # - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с использованием делегатов и шаблона стратегии.Есть две стипендии.Я хочу выбрать случайного студента, который соответствует критериям стипендии.Не работаетДля строки if (pickup) отображается ошибка «Не удается неявно преобразовать тип« StudentGroup.Pickup »в« bool ».Как это решить?Спасибо.Есть ли другая ошибка?Спасибо.

public class Student
{
    public string name;
    public int year; //1 to 4
    public double gpa; //0-4.0
}

public class StudentGroup
{
    private List<Student> students = new List<Student>();
    private Random rnd = new Random();
    public delegate bool Pickup(Student x);
    public void AddStudent(string name, int year, double gpa)
    {
        Student s = new Student();
        s.name = name;
        s.year = year;
        s.gpa = gpa;
        students.Add(s);
    }

    public Student PickFor(Pickup pickup)
    {
        List<Student> candidates = new List<Student>();
        foreach (Student s in students)
        {
            if (pickup)
                candidates.Add(s);
        }

        if (candidates.Count > 0)
            return candidates[rnd.Next(candidates.Count)];
        else
            return null;
    }
}

public class Program
{
    public static void Main()
    {
        StudentGroup sg = new StudentGroup();
        sg.AddStudent("Peter", 2, 3.2);
        Student candidate1 = sg.PickFor(s => s.gpa >= 3.8);
        Student candidate2 = sg.PickFor(s => s.gpa >= 3.0 && s.year == 1);
    }
}

1 Ответ

0 голосов
/ 06 декабря 2018

Для вашего делегата Pickup требуется аргумент типа Student, поэтому обязательно укажите его в своем выражении if, а также убедитесь, что вы что-то делаете со своим делегатом.

if (pickup(s))
    candidates.Add(s);
...