通用约束——I';I’我不知道如何用非此即彼的方式来解决这种情况

本文关键字:方式 非此即彼 情况 何用 解决 我不知道 约束 | 更新日期: 2023-09-27 18:25:13

基本上我有以下内容:

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还是IComparable<T>。所以,除了选择一个并继续下去,我不知道在这里该怎么办。而且,无论我选择哪一个,我都会输给另一个,因为它们是分开的,彼此没有继承(这是有道理的)。

我是不是遗漏了一些东西,即有一种方法可以同时使用这两种方法,还是我必须选择一种(可能是通用版本)?

通用约束——I';I’我不知道如何用非此即彼的方式来解决这种情况

我根本不明白为什么第一个方法是泛型的。为什么不只是:

public static bool IsBetween(this IComparable value, IComparable left, IComparable right)

使方法通用会增加什么价值?显然,您无法避免装箱惩罚,因为当您调用CompareTo(object)时,值将被装箱。

除非你有一些令人信服的理由让这个方法通用,否则不要让它通用。然后它有一个不同于其他方法的签名,您的问题就解决了。

在.NET中,方法解析重载不考虑返回类型和泛型约束。因此,即使IComparableIComparable<T>有一些共同点,仍然不起作用。只需选择IComparable<T>版本即可。标准.NET类型,如Int32、Decimal、DateTime。。。无论如何都要实现这两个接口。