gpt4 book ai didi

c# - 单个泛型的 Comparable 和 Nullable 约束

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

我想编写一个扩展方法,将一个值与另外两个值进行比较,并确定该值是否在另外两个值之内。这适用于此目的

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/

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