1

ある数値が他の 2 つの数値 a と b の間にあるかどうかを検証する関数があります。double の場合、この関数は次のようになります。

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

ただし、ここでの問題は、integer または decimal がこの範囲内にあるかどうかを確認できるようにする必要があることです。したがって、署名付きのオーバーロードを指定する必要があります。

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

質問: T が IComparable から継承される場所を追加して、これを普遍的にする方法はありますか。これが私が探しているものです:

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

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 に答える