C# 如何避免不使用位运算符的短路操作

C# 如何避免不使用位运算符的短路操作,c#,operators,C#,Operators,我想看看是否有更好的方法来写以下内容: if ((DirectoryDetailsPath == null) & (FileDetailsPath == null)) { Console.WriteLine("Error: Path for 'Directory' or 'File' has to be specified."); } 不使用按位“&”运算符。我更喜欢使用逻辑运算符,但由于短路,我无法同时计算这两个字段 我只想在两个字段都为“null”时看到一个错误 谢谢我只想在

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

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

}
不使用按位“&”运算符。我更喜欢使用逻辑运算符,但由于短路,我无法同时计算这两个字段

我只想在两个字段都为“null”时看到一个错误

谢谢

我只想在两个字段都为“null”时看到一个错误

然后尝试使用
&&

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

}

更多信息:

如果第一个条件为假,上述解决方案将短路。这仍然满足了仅在两个值都为null时写入输出的要求。

我只想在两个字段都为“null”时看到错误

然后尝试使用
&&

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

}

更多信息:


如果第一个条件为假,上述解决方案将短路。这仍然满足了仅在两个值都为null时写入输出的要求。

如果确实必须计算这两个条件,并且不想使用按位运算符,请在
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.");
}

如果您确实必须计算这两个条件,并且不想使用按位运算符,请在
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.");
}

如果你在第一次之后就知道结果,为什么你要对这两个都进行评估?如果您真的需要评估两者,为什么不使用
&
?评估两者的唯一原因是它们是否有副作用,这是糟糕的编程风格。在这种情况下,应首先评估方法,然后在条件
bool运算符中检查其结果&(bool a,bool b)
实际上未定义为“按位”运算符。尽管这一点是学术性的,并且经常被称为按位。@JonSkeet我试图评估这两个值,因为我的条件是仅当两个值都为空时才显示错误。有更好的方法吗?@PranavShah:但是一旦你看到第一个表达式不是空的,你就知道你不会显示错误消息——那么为什么还要费心计算第二个表达式呢?如果你知道第一个表达式之后的结果,为什么要同时计算这两个表达式呢?如果您真的需要评估两者,为什么不使用
&
?评估两者的唯一原因是它们是否有副作用,这是糟糕的编程风格。在这种情况下,应首先评估方法,然后在条件
bool运算符中检查其结果&(bool a,bool b)
实际上未定义为“按位”运算符。尽管这一点是学术性的,并且经常被称为按位。@JonSkeet我试图评估这两个值,因为我的条件是仅当两个值都为空时才显示错误。有更好的方法吗?@PranavShah:但是一旦你看到第一个表达式不是空的,你就知道你不会显示错误消息-那么为什么还要麻烦计算第二个表达式呢?@MystereMan抱歉,我的错:)@Jeff这将导致一个短循环,并在计算结果时立即显示输出“(DirectoryDetailsPath==null)”。如果第一个检查为真,它将不会进入第二个检查,我需要测试+1-&&两个选项,当它遇到错误时,它们将立即短路。。。因此将返回false,这正是您想要的一旦遇到一个真值,它就会短路,这可能是提问者意外地期望的&,这将是一种可以理解的混乱。简言之,汗的回答是正确的。@汗的否决票可能是因为你错了,而OP是正确的<代码>&将在第一个操作数为真时短路。@Khan我刚刚注意到那个位。这个问题有缺陷;标题与正文不同。@MystereMan Sorry,my bad:)@Jeff这将导致一个短循环,并在其计算结果为“(directorydailspath==null)”时立即显示输出。如果第一个检查为真,它将不会进入第二个检查,我需要测试+1-&&两个选项,当它遇到错误时,它们将立即短路。。。因此将返回false,这正是您想要的一旦遇到一个真值,它就会短路,这可能是提问者意外地期望的&,这将是一种可以理解的混乱。简言之,汗的回答是正确的。@汗的否决票可能是因为你错了,而OP是正确的<代码>&将在第一个操作数为真时短路。@Khan我刚刚注意到那个位。这个问题有缺陷;标题与正文不同。