0

Python では、次のようなことができます。これは、1 つのステートメントで 2 組の条件を使用するよりも、より明確だと思います。

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 でできるように、1 つの「トリプル」条件ではなく、トリプル条件を 2 セットのペアに分割する必要がないように、2 番目の条件を追加しないようにする方法はありますか?

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

編集:これを使用する例は、 anintが数値の範囲内にあることを確認することです。

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

3 に答える 3

6

条件をグループ化します。これを試して、

if ((1 < 2) && (2 < 3))
{
   // statements here
}
else
{
   // statements here
}
于 2012-09-24T00:33:49.870 に答える
3

はい、あります、あなたが探している

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

&&は論理 AND 演算子で、||論理 OR もあります。

于 2012-09-24T00:34:35.833 に答える
2

1 < 2 < 3C#で行う方法はありません。ただし、それを模倣する簡単な拡張メソッドを作成できます。

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
}

If は 3 つの数値では間違いなくやり過ぎですが、比較する値がさらにある場合やハードコードされていない場合に役立つ場合があります。

于 2012-09-24T00:59:13.120 に答える