c# - 策略设计模式问题委托 c#
问题描述
我无法使用委托和策略模式。有两个奖学金。我想随机挑选一个符合奖学金标准的学生。它不起作用。对于 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);
}
}
解决方案
您的 Pickup 委托需要一个 Student 类型的参数,因此请确保在您的 if 语句中传递一个参数,并确保您正在与您的委托做某事。
if (pickup(s))
candidates.Add(s);
推荐阅读
- django - 如何在 django 的基于函数的视图中设置外键?
- java - 我的解释器语言似乎无法识别“+”符号并返回错误。我的代码怎么出错了?
- python - python中的多处理和多线程
- ruby-on-rails - 图像隐私:Base64 或匿名隐私
- bash - 无法获取程序以在行尾打印文件
- actionscript-3 - 函数执行次数和激活问题
- javascript - 有没有办法清理javascript中的子类参数?
- javascript - 更新 audio.currentTime 重置为 0 - 意外行为(Django?)
- python - 在密集图上找到整体最短路径
- javascript - 如何添加 eventListener 单击具有不同自定义数据键属性的多个 div