在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
答案 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个数字肯定是过度杀伤,但如果有更多值要比较或者它们没有硬编码,则可能有用。