C#帮助或检查双方

C#帮助或检查双方,c#,C#,这应该是一个简单的问题,但作为一个新手,我不知道答案 在下面的代码中,如果ignorePath为true,我不想输入if语句,即使tempPath不为null且tempPath长度不为0。我原以为单曲能做到这一点,但似乎不行 if (((tempPath != null) && (tempPath.Length != 0)) | ignorePath == false) { } 谢谢像这样更改它: if (!ignorePath) if ((tempPath != nu

这应该是一个简单的问题,但作为一个新手,我不知道答案

在下面的代码中,如果ignorePath为true,我不想输入if语句,即使tempPath不为null且tempPath长度不为0。我原以为单曲能做到这一点,但似乎不行

if (((tempPath != null) && (tempPath.Length != 0)) | ignorePath == false)
{

}
谢谢

像这样更改它:

if (!ignorePath)
   if ((tempPath != null) && (tempPath.Length != 0)))
{
}


因此,如果我清楚地理解,当
ignorePath
true
时,您想忽略
if
语句吗?所以没有必要,或者,这是第三个条件

if (ignorePath == false && tempPath != null && tempPath.Length != 0)
{

}

如果(!ignorePath | |((tempPath!=null)和(&(tempPath.Length!=0))

我会说下面的代码会更清晰:

if ((!ignorePath) && (tempPath != null) && (tempPath.Length != 0))
{
    // do something here
}
首先,您验证
ignorePath
为false(因为当代码为true时不希望代码执行),然后检查
tempPath
是否不
null
且其长度为非零

这里的优点是您已经将
ignorePath
变量的检查移到了第一位。因为它显然是对您最重要的东西(它凌驾于其他两个条件之上),所以为了清晰易读,它应该排在第一位(我想还有性能,但这在这里并不重要)


请记住,没有理由根据文本值
true
false
检查布尔类型。
if
语句已评估
()
中语句的值是
true
还是
false
。显式指定它只是多余的


我看到上面代码的唯一问题是
!ignorePath
有点难读。它产生了双重否定,因为你“没有忽略”某些东西。这到底是什么意思?这就是为什么大多数编码标准(包括Microsoft推荐的.NET标准)鼓励您使用正语法命名布尔变量。我会将该变量称为类似于
checkPath

看起来tempPath是一个字符串,因此您可以编写如下代码:

if(!string.IsNullOrEmpty(tempPath) && !ignorePath)
{

}

您需要
&&
运算符,因为您希望这两个条件都为true才能输入if。

是否有
错误!忽略路径
?而
usePath
(或者这里“ignore”的适当反转)可能会比
更好!忽略…
可被视为双重否定。
|
是按位OR运算符。
|
是逻辑OR运算符。我们根本不需要OR。为了使语句的计算结果为true,必须满足所有这些条件,因此您需要使用AND(
&&
)。但是是的,Uwe是正确的:
&
|
是按位运算符。将它们加倍以获得逻辑运算符(这是您在
if
语句中想要的):
&&
|
。如果ignorePath为true,还将检查tempPath!当然,应该首先检查
ignorePath
,以使其更具可读性,但从功能上讲,它不会产生任何影响。如果没有提供括号,C#将从左到右计算条件,但括号不会改变这里的任何内容。逻辑运算符
&&
的优先级低于
=
==
,不考虑括号。括号在混合AND和OR时很有用,但我看不出有什么理由只与AND一起使用。为什么要将它拆分为两个独立的
if
语句,而一个语句就可以完成这项工作呢?令人惊讶的是,你的答案在它们的一生中变化如此剧烈。而且变形的方向也和我的非常相似!但这里没有指控;对我来说,这绝不是什么假设。但如果有两个
if
s,尤其是没有大括号,它的可读性就差得多。那些大括号是用来干什么的?它们在这里是多余的。@Cody我不知道你为什么要寻找像你这样的答案!也许你是在抄袭别人帖子的答案@法辛,每个人都可以检查答案的修改,看看科迪提交他的答案时你的答案是什么……哦!多少个括号!这个问题更容易解决!没有成千上万的括号@法辛:在不牺牲可读性的情况下是不行的。将每条语句分解成一个逻辑块很重要,它清楚地表明
if
语句包含3个独立的部分。你可以选择不用括号来写,但我不会在我的代码中这样写。谢谢你,科迪,这很好用。谢谢大家的建议和意见。
if(!string.IsNullOrEmpty(tempPath) && !ignorePath)
{

}