==
演算子によって実行される等価性テストは、=
演算子によって実行される割り当てよりも優先されます。したがって、==
演算子の2つの辺が等しい場合、変数はtrue
に等しく設定されます。そうでない場合はfalse
に設定されます。言い換えれば、それは次のようになります:
if ((File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
isDir = true;
else
isDir = false;
これはVB.NETで可能です。私は他の言語には答えられません。 VB.NETでは、同等のは次のようになります。VBはそれが代入と平等・テスト演算子だの両方に同じ文字(=
)を使用しているため
Dim isDir As Boolean = ((File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory)
、それはあなたがコンテキストに基づいて実行される操作を決定します。 VBコンパイラは、最初の=
演算子が代入であり、2番目の演算子が等価テストであることを知るには十分にスマートです。しかし、これは明らかに紛らわしいので、読みやすいようにしばしばお勧めしません。特に、他の言語の背景を持つ人々にとっては混乱します。 =
は常に代入演算子、および代入式は常に(と評価されたため、C#で起こる理由は
int y;
int x = y = 5; // Both x and y will be set to 5
:たとえば、C#では、あなたは同じ値に2つの変数を設定するには、次の操作を行うことができ割り当てられた値を返します。したがって、この場合、式y = 5
は変数y
に値5を割り当てるだけでなく、値5も評価します。したがって、x
をその式の値に設定すると、同様に5に設定されます。 VBでは、しかし、結果は非常に異なっている:それはFalse
と評価されますので、
Dim y As Integer
Dim x As Integer = y = 5
はVBでは、コンパイラは、表現y = 5
は平等のテストであることを前提としています。したがって、Option Strict
の値に応じて動作する場合と動作しない場合があります。x = False
を設定しようとします。
確かに、あなたは 'boolean numberEqualsFive = num == 5'のようなコードを書いていますか?いいえ。 –
[評価の優先順位と順序](http://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx)と[ここでは特にC#]のコンテキスト(http://msdn.microsoft.com /en-us/library/aa691323(v=vs.71).aspx) –
このコードは、 'File.GetAttributes'の結果がバイナリフラグビット' FileAttributes.Directory'を含んでいるかどうかをチェックします。 –