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

Sev*_*ays 5 c# range

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

dkn*_*ack 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你这样做

double t = 0.5;
bool isInRange = t.InRange(-1.0, 1.0);
Run Code Online (Sandbox Code Playgroud)

完美主义者的更新

经过与@CodeInChaos的广泛讨论后说道

我可能会按照先前评论中的建议使用IsInOpenInterval.但是我不确定没有数学背景的程序员是否会理解这个术语.

您也可以命名该功能IsInOpenInterval.

更多信息

  • 你可以使它更通用,将`double`改为`IComparable <T>`然后使用`CompareTo`而不是`<``>` (5认同)
  • @dknaack:我的建议很简单@CodeInChaos所说的.而且,顺便说一下你不应该使用`== 1`和`== -1`,因为`CompareTo`并不能保证返回那些数字,而是一个数字`小于0`,`等于0`或`大于0`.[ - > LINK](http://msdn.microsoft.com/en-us/library/4d7sx9hd.aspx) (3认同)
  • 伟大的新变化,你现在拳击价值,你失去了所有类型的安全.我认为@digEmAll的意思是使用签名`bool InRange <T>(T值,T from,T to),其中T:IComperable <T>`. (2认同)