如果范围(x,y)中的值函数c#

时间:2012-01-08 09:47:46

标签: c# range

c#是否有一个函数返回表达式的布尔值:if(value.inRange(-1.0,1.0)){}

3 个答案:

答案 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 methodstart number并在执行{{1}之后创建一个offset step来生成数字序列就足够了结果集合,就像提供的aswer一样。