如果范围(x,y)中的值函数c#
c#是否有一个返回表达式布尔值的函数: if(value.inRange(-1.0,1.0)){}
?
描述
我建议你使用扩展方法。
扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。
您可以以通用方式创建此扩展方法(thx到digEmAll和CodeInChaos,谁建议)。 然后,您可以在实现IComparable
每个对象上使用它。
解
public static class IComparableExtension { public static bool InRange(this T value, T from, T to) where T : IComparable { return value.CompareTo(from) >= 1 && value.CompareTo(to) <= -1; } }
然后你这样做
double t = 0.5; bool isInRange = t.InRange(-1.0, 1.0);
完美主义者的更新
经过与@CodeInChaos的广泛讨论后说道
我可能会按照先前评论中的建议使用IsInOpenInterval。 但我不确定没有数学背景的程序员是否会理解这个术语。
您也可以将函数命名为IsInOpenInterval
。
更多信息
- MSDN - 扩展方法(C#编程指南)
- MSDN - IComparable接口
例如,使用Math.Abs(value) <= 1.0
不是很清楚,但可能是相反的:
Enumerable. Range(-1, 2).Any(x=>x==value)
Enumerable. Range(-1, 2).Any(x=>x==value)
。
顺便说一句,没有编译,从移动写。
编辑
我在使用Enumerable.Range
EDIT1
如果我们谈论floating point
,那么创建一个extension method
就足够了,它通过指定start number
和offset step
以及在生成的集合上执行Any
之后生成数字序列,就像在aswer中提供的那样。