约束下限和上限/限制之间的数字的最佳方法

时间:2016-01-14 19:41:58

标签: c# c#-6.0

我的值不能低于设定值或高于其他设定值。我已经写了一个方法来处理这个问题。我告诉你两个版本的这个相同的方法略有不同。一个包含多个if语句,另一个包含else if树。两者都返回相同的结果。 但是出于某种原因,一个人比其他人好吗?或者(开玩笑)还有第三种更好的方法吗?

double Constrain(double low, double value, double high)
{
    if (value < low)
        return low;
    else if (value > high)
        return high;
    else
        return value;
}

double Constrain(double low, double value, double high)
{
    if (value < low)
        return low;
    if (value > high)
        return high;
    return value;
}

5 个答案:

答案 0 :(得分:3)

一个更好吗?性能似乎不是问题,因此问题变得哪个更具可读性和可维护性?如果您使用ReSharper,它会将第一个标记为具有不必要的else s。如果您不使用ReSharper,那么应该归结为您和您的团队最容易理解的问题。

我原本打算建议使用max(min(输入,高),低)。我决定不这样做,因为更难理解(imo)。

答案 1 :(得分:1)

不是您的问题的答案,但由于我们在答案中有一个很好的对话,我会将此版本添加为更通用的代码段:

public static T Constrain <T>(this T val, T low, T high) where T : IComparable<T>
{
    if (val.CompareTo(low) < 0) return low;
    if (val.CompareTo(high) > 0) return high;
    return val;
}

答案 2 :(得分:0)

这几乎是一样的。如果值介于低值和高值之间,那么它将必须在两种方式上执行两次检查和return语句。如果该值高于高值,则两者都必须进行两次检查(首先是低检查)然后是return语句。如果该值低于低值,则两者都必须执行一次检查和返回语句。

答案 3 :(得分:0)

好吧,也许不是滑稽的。我就是这样做的

function constrain (low, value, high) {
    return (value<low? low:
            value>high? high:
            value);
}

答案 4 :(得分:-1)

  

我的值不能低于设定值或高于其他设定值。

所以这意味着程序员只要在使用这个值时就可以调用Constrain - 这听起来像是一个容易犯的简单错误。

如果你有它的范围,你可以接近这是一种更面向对象的方式,并创建一个钳制双值的类。这样你就可以随意使用它,它永远不会超过极限。