c#如果一个或两个大于0,则最少两个数字

pro*_*ach 6 c#

我正在寻找的逻辑是,如果其中一个数字> = 0(它们不一定是),那么返回两个中的最小值也大于0.我为它编写的代码是如此丑陋,我很惭愧发布它!

编辑:样品1,-1 => 15,6 => 5 -1,-1 => 0

(如果两者都小于0,则返回0)

Jon*_*eet 14

我将尝试我的心灵力量,并假设如果两者都为零,你想要返回0.

换一种说法:

return x < 0 && y < 0 ? 0
     : x < 0 ? y
     : y < 0 ? x
     : Math.Min(x, y);
Run Code Online (Sandbox Code Playgroud)

我相信我能做得更好......

如果它们都不大于0,那么至少有一个小于零,所以你只关心它们中的较大者,或者如果它们都小于零则为0.否则,我们只采取最低限度.

return x < 0 || y < 0 ? Math.Max(Math.Max(x, y), 0) : Math.Min(x, y);
Run Code Online (Sandbox Code Playgroud)

如果您不太关心性能,可以使用:

new[] { x, y }.Where(z => z > 0)
              .DefaultIfEmpty() // Make sure there's at least one entry
              .Min();
Run Code Online (Sandbox Code Playgroud)

坦率地说,这些都不是很好,IMO.我想要对他们中的任何人发表评论......

  • @nikie:除了`x = 5`,`y = -1`返回0 (4认同)

sgm*_*ore 7

这太难看了吗?

private int GetSmallestNonNegative(int a , int b)
{
    if (a >= 0 && b >= 0)
        return Math.Min(a,b);
    else if (a >= 0 && b < 0)
        return a;
    else if (a < 0 && b >= 0)
        return b;
    else
        return 0;
}       
Run Code Online (Sandbox Code Playgroud)

  • 怎么回事`Math.Max(Math.Min(a,b),0)` (5认同)

Jim*_*mmy 6

我认为这很简单,可扩展到任何数字参数,并且相当好地反映了问题的原始措辞("一组数字的最小值也大于或等于0"):

new[] { a,b,0 }.Where(x => x >= 0).Min();
Run Code Online (Sandbox Code Playgroud)