Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果一个简洁的陈述什么都不做,如何使它变得虚假_C#_If Statement - Fatal编程技术网

C# 如果一个简洁的陈述什么都不做,如何使它变得虚假

C# 如果一个简洁的陈述什么都不做,如何使它变得虚假,c#,if-statement,C#,If Statement,如果我有: logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse); 如果我的论点是真的,我该怎么做呢?它只做那句话的正确的一半,而不是错误的一半。我试着这样做: logicBeingTested.isItTrue ? (status = true) : (); 但这不起作用。我知道我可以通过做一个if语句来解决这个问题,但是出于好奇,有没有可能给一个论点一个什么都不做的答案呢 编辑:我在OP中的

如果我有:

logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);
如果我的论点是真的,我该怎么做呢?它只做那句话的正确的一半,而不是错误的一半。我试着这样做:

logicBeingTested.isItTrue ? (status = true) : ();
但这不起作用。我知道我可以通过做一个if语句来解决这个问题,但是出于好奇,有没有可能给一个论点一个什么都不做的答案呢

编辑:我在OP中的布尔值“状态”有点误导,我澄清了我在新编辑中想要的内容

可能使用以下方法:

但我确实认为,正如其他人所评论的那样,为了清晰起见,if会更好:

if (logicBeingTested.isItTrue)
{
    status = true;
}

我认为最好的阅读也是最好的写作:

status |= logicBeingTested.isItTrue;
仅仅分配一个值(即使它是无用的)可能和条件指令一样快(这可能会涉及
CMOV
,这是一个很小的优化,应该被忽略),而且可读性更高(IMO?)

如果
状态
可为空
,则只需返回普通
状态
(编辑:从注释看来,它不是很清楚,但它与<代码> Boo.<代码> >,我只考虑<代码>如果在这种情况下更清楚。还注意到,如果<代码>状态< /代码>是一个属性,它将涉及不同的行为,但我们都有琐碎的属性吸气剂,对吗?) 请注意,
status |=logicBeingTested。isItTrue
与乍看之下的想法相反,等同于
if
块,if
logicBeingTested。isItTrue
false
状态
不变(而非
false
)如果它是
null
,它仍然是
null
。这是(IMO)使用
if
的一个很好的理由,如果您使用
bool?

关于原始代码的注意事项:通常用作函数,而不是因为其操作数求值的副作用。读取该代码时可能会产生误导


编辑问题附录:如果您不只是给变量赋值,而是需要执行操作,那么没有什么比旧的更清楚的了,如果:

if (logicBeingTested.isItTrue)
    DoSomething();
请注意,如果
logicBeingTested
可能为
null
,则可以将其重写为:

if (logicBeingTested?.isItTrue ?? false)
    DoSomething();

在这种情况下,如果
logicBeingTested
您的行为与
logicBeingTested一样。isItTrue
was
false
,要做相反的事情,只需使用
?true

您标记了它。您在这里根本不使用
if
语句,但您应该这样做。我认为三元操作不适合这种情况-一种正常的操作
if
语句会更好。也许
status=status
?首先,这是条件运算符的一种奇怪用法,您对这个操作的结果做了什么吗?听起来这应该是一个正常的
if
块。@user1666620谢谢,不知道这被称为三元操作。我不知道尽管这与if语句是一样的,但对于只能为true或false的布尔值来说更为简洁,这是毫无意义的。布尔值的标准值如果不更改则为false。您可以将true或false指定给它,这与将true指定给它或不执行任何操作相同(它保持为false).lol这很聪明,但是如果状态一开始是空的,那么就会抛出一个错误,对吗?不,在这种情况下,状态将保持为空,就像以前一样。我想说第一个是通常的解决方案,它是有效的,最重要的是,它完全清晰地反映了预期的逻辑。如果这是真的,请更改“状态”;否则,保持不变。同意,我自己也会选择if,但OP说为了论证,if解决方案被排除在外。第一个解决方案应该是被接受的:if支持nullable,而当前被接受的答案不支持它。@AdrianoRepetti你是对的,它与nullables一起工作。我对这个操作符和nullables完全混淆了。对不起!“更具可读性”--你有权发表你的观点,但这不是一个普遍的观点,我甚至怀疑它并不普遍。我会选择
if(logicBeingTested.isItTrue)status=true;
。@hvd我倾向于同意“if”是明确的,但简单的赋值也会突出显示“status”“是一个介于先前值和logicBeingTested之间的OR。isItTrue(而“if”在一读时隐藏了它,依我看)。这个答案甚至不应该被否决,依我看。1)OP要求为了论证而避免使用if。2) 仅提供的不带if的解决方案不支持Nullable。3) 大多数人不会识别按位或赋值运算符“|=”;在这里使用它是完全没有必要的,更不用说它不支持nullables了。@daniloquio 1)这是答案的第一部分(它可以用于nullables,您可能想试试)。我强烈认为答案还应该包括一些关于OP提出的问题的“讨论”……答案的价值在哪里?提供一个坏的代码示例,仅仅是为了“直截了当地回答问题?”2)你可能想考虑一下:作为一个IF,我不建议在这里使用三元操作符……3)如果他们不知道“=”,那么他们可能应该回到读MSDN(值得注意的是,对于布尔操作数,它是逻辑的,而不是按位或……)@daniloquio别担心,
a |=b
扩展为
a=a | | b
,当它涉及可空值时,并不立即理解其含义,如果
b
false
,那么
a
是不变的-而不是
false
(这就是为什么我会选择
if
).关于讨论:嗯,当我不同意我建议的解决方案时(就像在这个例子中,顺便说一句),我也会尝试解释为什么,但我想这是一个POV
if (logicBeingTested.isItTrue)
    DoSomething();
if (logicBeingTested?.isItTrue ?? false)
    DoSomething();