我想编写一个扩展方法,将一个值与另外两个值进行比较,并确定该值是否在另外两个值之内。这适用于此目的
public static bool IsWithin<T>(this T value, T min, T max) where T : IComparable<T>
{
return (bool)(value.CompareTo(min) > 0 && value.CompareTo(max) < 0);
}
我还想扩展此方法以处理 Nullable<T>
.如果值为空,我希望忽略任何一个边界条件。我曾尝试对 T 施加额外的约束,但这不受支持。以下代码无法编译,但这是我想要实现的。
public static bool IsWithinInclusive<T>(this T value, Nullable<T> min, Nullable<T> max) where T : IComparable<T>
{
return (bool)(
(min.HasValue ? value.CompareTo(min) >= 0 : true) &&
(max.HasValue ? value.CompareTo(max) <= 0 : true));
}
是否可以编写一个实现此目的的方法?
最佳答案
你需要约束T
成为struct
匹配 definition of Nullable<T>
:
public static bool IsWithinInclusive<T>(this T value, Nullable<T> min, Nullable<T> max) where T : struct, IComparable<T>
{
return
(min.HasValue ? value.CompareTo(min.Value) >= 0 : true) &&
(max.HasValue ? value.CompareTo(max.Value) <= 0 : true);
}
您还需要使用 .Value
得到T
来自 Nullable<T>
.
关于c# - 单个泛型的 Comparable 和 Nullable 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661603/