通用约束 - 我不确定如何用这两种情况来解决这种情况

m-y*_*m-y 5 c# generics extension-methods icomparable generic-constraints

基本上我有以下几点:

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>
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题是我不能这样做,因为你不能拥有一个具有相同签名的成员,即使约束不同.但是,没有办法说明约束是IComparableOR IComparable<T>.所以,我不确定除了选择一个并继续使用它之外该做什么.并且,无论我选择哪一个,我都会失败,因为它们是分开的,不会相互继承(这是有道理的).

我在这里遗漏了一些东西是否有办法完成两者的使用,或者我将不得不选择一个(可能是通用版本)?

Eri*_*ert 8

我不明白为什么第一种方法是通用的.为什么不是这样:

public static bool IsBetween(this IComparable value, IComparable left, IComparable right)
Run Code Online (Sandbox Code Playgroud)

使方法通用添加有什么价值?显然你不会避免拳击惩罚,因为你打电话时价值将被装箱CompareTo(object).

除非您有一些令人信服的理由使该方法具有通用性,否则不要使其成为通用的.然后它与其他方法有不同的签名,您的问题就解决了.