C#没有选择具有默认值的正确重载
本文关键字:重载 默认值 有选择 | 更新日期: 2023-09-27 18:20:00
我在C#中使用FluentValidation框架,它有以下两个方法重载:
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>
{
// ...
}
IEqualityComparer<T>
没有继承IEqualityComparer
,因此您的类没有实现IEqualityComparer
!同时执行这两项。