C#没有使用默认值选择正确的重载

时间:2012-01-09 18:05:04

标签: c#

我在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>
{
     // ...
}

1 个答案:

答案 0 :(得分:2)

IEqualityComparer<T>未继承IEqualityComparer,因此您的课程未实施IEqualityComparer!实施它们。