如何指定T从其他接口继承.通用比较器

Ast*_*arp 1 .net c#

我有一个函数来验证一个数字是否落在另外两个数字a和b之间.对于双打这个函数看起来像这样:

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

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

public static bool IsBetween(this int num, double minValue, double maxValue)
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法通过添加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);
}
Run Code Online (Sandbox Code Playgroud)

我可能会尝试将所有内容都投入,double但如果所有值都是整数或小数,那么这将是一种过度杀伤.

Ree*_*sey 5

你写这个:

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

话虽这么说,你可能想用IConvertible来代替IComparible,因为你正在施法.这样可以让您更清晰地转换为常见类型.