如何在不使用按位运算符的情况下避免短路操作

时间:2012-04-24 18:40:14

标签: c# operators

我试图看看是否有更好的方法来编写以下内容:

if ((DirectoryDetailsPath == null) & (FileDetailsPath == null))
{
  Console.WriteLine("Error: Path for 'Directory' or 'File' has to be specified.");

}

不使用Bitwise“&”运营商。我会使用逻辑运算符,但由于短路,我无法评估这两个字段。

如果两个字段都为“null”,我只想看到错误。

由于

2 个答案:

答案 0 :(得分:2)

如果两个字段均为“null”,我只希望看到错误。

然后尝试使用&&

if ((DirectoryDetailsPath == null) && (FileDetailsPath == null))
{
  Console.WriteLine("Error: Path for 'Directory' or 'File' has to be specified.");

}

更多信息:

如果第一个条件为假,上述解决方案将会短路。如果两个值都为空,这仍然满足只写输出的要求。

答案 1 :(得分:2)

如果您真的必须评估这两个条件并且不想使用按位运算符,请在if语句之外执行。

bool isDirectoryDetailsPathNull = DirectoryDetailsPath == null;
bool isFileDetailsPathNull = FileDetailsPath == null;

if (isDirectoryDetailsPathNull && isFileDetailsPathNull)
{
    Console.WriteLine("Error: Path for 'Directory' or 'File' has to be specified.");
}

然而,这没有任何意义。编译器可能会决定内联变量,有效地为你提供这个,这就是你所说的你不想要的。

if ((DirectoryDetailsPath == null) && (FileDetailsPath == null))
{
    Console.WriteLine("Error: Path for 'Directory' or 'File' has to be specified.");
}