1

我有一个函数可以验证一个数字是否介于其他两个数字 a 和 b 之间。对于双打,这个函数看起来像这样:

public static bool IsBetween(this double num, double minValue, double maxValue)
{
   return (num >= minValue && num <= maxValue) 
          || (num >= maxValue && num <= minValue);
}

然而,这里的问题是我需要能够检查整数或小数是否在这个范围内。所以我必须用签名指定一个重载:

public static bool IsBetween(this int num, double minValue, double maxValue)

问题:有没有办法通过添加从 IComparable 继承 T 的位置来使其通用。这是我正在寻找的:

public static bool IsBetween <T : IComparable> (this T num, K minValue, K maxValue)
{
   return (num >= (T)minValue && num <= (T)maxValue) 
       || (num >= (T)maxValue && num <= (T)minValue);
}

我可能会尝试将所有内容都输入,double但如果所有值都是整数或小数,那将是矫枉过正。

4

2 回答 2

5

你把它写成:

public static bool IsBetween <T, K>(this T num, K minValue, K maxValue)
    where T : IComparable
    where K : IComparable
{
    // ...

话虽如此,你可能想用IConvertible而不是来写这个IComparible,因为你正在铸造。这将使您可以更清晰地转换为通用类型。

于 2012-08-16T16:18:07.543 回答
2

您需要where在签名右侧使用一个类,如下所示:

public static bool IsBetween<T, K>(this T num, K minValue, K maxValue)
        where T : IComparable<T>
        where K : IComparable<T>
{
    // ...
}
于 2012-08-16T16:17:40.490 回答