在单个if语句中使用多个条件?

时间:2012-09-24 00:32:39

标签: c# if-statement

在Python中,我可以做一些像这样的事情,我认为比一对语句中的两对条件更清晰:

if 1 < 2 < 3:
  print 'triple testing?'

else:
  print 'more like triple failing!'

没有遇到任何问题,但在C#中,它会在继续之前将第一个比较1 < 2转换为bool,因此它会抛出异常Operator '<' cannot be applied to operands of type 'bool' and 'int'

有没有办法避免添加第二个条件,所以我不必将三重条件分成两组,而不是一个“三重”条件,因为我可以用Python做什么?

if (1 < 2 & 2 < 3) { ... }

编辑:我使用此示例的示例是确保int介于一系列数字之间。

if ((0 < x) && (x < 10) { ... } //I can already do this
vs
if (0 < x < 10) { ... } //Would rather have something like this

3 个答案:

答案 0 :(得分:6)

对条件进行分组。试试这个,

if ((1 < 2) && (2 < 3))
{
   // statements here
}
else
{
   // statements here
}

答案 1 :(得分:3)

是的,有,你正在寻找

If ((1 < 2) && (2< 3)) { doWhatever(); }

&&是逻辑AND运算符,逻辑OR也有||

答案 2 :(得分:2)

无法在C#中执行1 < 2 < 3。但是,您可以编写一个快速扩展方法来模仿它:

public static class Test
{
    public static bool IsSorted<T>(this IEnumerable<T> e)
    {
        return e.Zip(e.Skip(1), (a, b) => Comparer<T>.Default.Compare(a, b))
            .All(x => x <= 0);
    }
}

...

if (new[] { 1, 2, 3 }.IsSorted())
{
    // Do something
}

如果对于3个数字肯定是过度杀伤,但如果有更多值要比较或者它们没有硬编码,则可能有用。