我有以下代码,我正在尝试为我的域对象编写通用验证规则。在这样做的同时,我有一个问题来处理 Func 代表支持差异
public class Person { }
public class Employee : Person { }
internal interface IValidation<T> where T: Person
{
void AddValidationRule(Func<T,bool> predicateFunction);
}
internal class BaseValidation : IValidation<Person>
{
void IValidation<Person>.RegisterValidationRules(Person person)
{
}
}
internal class EmployeeValidation : BaseValidation
{
void RegisterValidation()
{
Func<Employee,bool> empPredicate = CheckJoiningDate;
base.AddValidationRule(empPredicate);
}
bool CheckJoiningDate(Employee employee)
{
return employee.JoiningDate > DateTime.Now.AddDays(-1) ;
}
}
使用上面的代码,编译器会给出一条错误消息说
在线编译器错误:base.AddValidationRule(empPredicate); 参数 1:无法从 'System.Func<>Employee, bool>' 转换为 'System.Func<>Person, bool>
我曾参考过此https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/dd465122%28v%3dvs.100%29但我仍然无法使编译器了解这里的逆变,
感谢您的帮助,以便我更好地理解这一点