2

次のようなifコントロールがあります。

if (Directory.Exists(System.IO.Path.Combine(systemPath, "Reports", companyName))
    && Directory.GetFiles(System.IO.Path.Combine(systemPath, "Reports", companyName),
       "*.*", SearchOption.TopDirectoryOnly).Length > 0)

制御の最初の部分はディレクトリが存在するかどうかをチェックし、2 番目の部分はディレクトリ内のファイルの数を制御するためのものです。

ディレクトリが存在しない可能性があるため、2 番目の部分でDirectoryNotFoundExceptionの例外が発生する可能性があります。また、ネストされたif条件を作成したくありません(最初にディレクトリの場合、2番目にファイルをカウントする場合)

私の質問はそれです。

「&&」演算子は、最初の条件が満たされていない場合でも、2 番目の条件をチェックしますか?

4

3 に答える 3

3

いいえ、ここには表示されません

条件付き AND 演算子 (&&) は、bool オペランドの論理 AND を実行しますが、必要に応じて 2 番目のオペランドのみを評価します。

于 2013-02-15T09:36:26.947 に答える
1

この演算子は、結論に至るために必要なもののみを (左から右に) 評価するため、遅延&&演算子と呼ばれます。非遅延対応は. と についても同様です。&|||

void Test()
{
    bool r;
    r = F() && T();     // Prints "False", returns false
    r = T() && F();     // Prints "True False", returns false

    r = F() & T();      // Prints "False True", returns false
}

bool F()
{ Console.Write("False "); return false; }

bool T()
{ Console.Write("True "); return true; }
于 2013-02-15T09:45:45.920 に答える
1

1 つの条件が false になるとすぐに、チェックは中止されます。ただし、ネストされた if を使用するか、DirectoryNotFoundException に try-catch-block を使用する必要があります。さらに、読みやすさを追加し、存在しないディレクトリに対応できます。

于 2013-02-15T09:36:02.787 に答える