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)

控制的第一部分检查目录是否存在,第二部分用于控制目录中的文件数。

由于该目录可能不存在,因此第二部分可以给出DirectoryNotFoundException异常。我也不想嵌套 if 条件(第一个 if 用于目录,第二个 if 用于计算文件)

我的问题是;

尽管第一个条件不满足,“&&”运算符是否检查第二个条件?

4

3 回答 3

3

不,这里看不到

条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。

于 2013-02-15T09:36:26.947 回答
1

一旦一个条件为假,检查将被中止。但是,对于 DirectoryNotFoundException,您要么必须使用嵌套的 if,要么必须使用 try-catch-block。此外,您将增加可读性,并且您可以对不存在的目录做出反应。

于 2013-02-15T09:36:02.787 回答
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 回答