策略设计模式问题委托c#

strategy design pattern problem delegates c#

我在使用委托和策略模式时遇到问题。有两种奖学金。我想随机挑选一名符合奖学金标准的学生。它不起作用。对于 if (pickup) 行,它显示错误 "Cannot implicitly convert type 'StudentGroup.Pickup' to '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);
    }
}

您的 Pickup 委托需要一个 Student 类型的参数,因此请确保在您的 if 语句中传递一个参数,并确保您正在对您的委托进行操作。

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