我在C#中使用FluentValidation framework,它有以下两种方法重载:
IRuleBuilder<TObject, TProperty>
IRuleBuilderOptions<TObject, TProperty> Equal(TProperty toCompare, [IEqualityComparer comparer = null])
IRuleBuilderOptions<TObject, TProperty> Equal(Expression<Func<TObject,TProperty>> expression, [IEqualityComparer comparer = null])
基本上,其中一个重载允许您传入实际的TProperty进行比较,另一个允许您执行一个从TObject返回TProperty的lambda。
当我执行以下操作时,它可以工作:
RuleFor(r => r.First).Equals(r => r.Second);
在这种情况下,它正在获得正确的重载。当我尝试传入比较器的值时,它默认为另一个重载:
RuleFor(r => r.First).Equals(r => r.Second, new ObjectComparer()); // will not compile
这不会编译,因为它认为我正在尝试使用第一个重载。
有没有办法可以强制C#使用第二次重载?
编辑:
ObjectComparer是一个IEqualityComparer:
public class ObjectComparer : IEqualityComparer<MyClass>
{
// ...
}
答案 0 :(得分:2)
IEqualityComparer<T>
未继承IEqualityComparer
,因此您的课程未实施IEqualityComparer
!实施它们。