gpt4 book ai didi

c# - 如何指定 T 是从其他接口(interface)继承的。通用比较器

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:19 24 4
gpt4 key购买 nike

我有一个函数可以验证一个数字是否介于另外两个数字 a 和 b 之间。对于 double ,此函数如下所示:

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,但如果所有值都是整数或小数,那我就太过分了。

最佳答案

你这样写:

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

话虽如此,您可能希望使用 IConvertible 编写此代码而不是 IComparible,假设您正在转换。这将使您能够更清晰地转换为通用类型。

关于c# - 如何指定 T 是从其他接口(interface)继承的。通用比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11991438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com