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