基本上我有以下内容:
public static bool IsBetween<T>(this T value, T a, T b)
where T : IComparable
{
...
}
public static bool IsBetween<T>(this T value, T a, T b)
where T : IComparable<T>
{
...
}
问题是我不能这样做,因为你不能拥有一个具有相同签名的成员,即使约束不同。但是,没有办法说明约束是IComparable
OR IComparable<T>
。所以,我不确定除了选择一个并继续使用它之外该做什么。并且,无论我选择哪一个,我都会失败,因为它们是分开的,不会相互继承(这是有道理的)。
我在这里遗漏了一些东西是否有办法完成两者的使用,或者我将不得不选择一个(可能是通用版本)?
答案 0 :(得分:8)
我不明白为什么第一种方法是通用的。为什么不呢:
public static bool IsBetween(this IComparable value, IComparable left, IComparable right)
使方法通用添加有什么价值?显然你不会避免拳击惩罚,因为当你拨打CompareTo(object)
时,这些值会被装箱。
除非您有一些令人信服的理由使该方法具有通用性,否则不要将其设为通用。然后它与其他方法有不同的签名,你的问题就解决了。
答案 1 :(得分:3)
在.NET方法中,解析重载不考虑返回类型和泛型约束。因此,即使IComparable
和IComparable<T>
有共同点仍然无效。只需选择IComparable<T>
版本即可。标准的.NET类型,如Int32,Decimal,DateTime,......无论如何都要实现这两个接口。