gpt4 book ai didi

c# - 嵌套内联 IF 语句

转载 作者:行者123 更新时间:2023-11-30 13:09:56 25 4
gpt4 key购买 nike

我有点困惑为什么这不起作用:

id = (isChar ? (id + 1 > 122 ? 65 : id++) : id++);

这里的输入既可以是int,也可以是转换为INT的char。然后我递增 id 并增加 int 或 char。问题是,当我输入一个字符时,数字似乎没有变化?

最佳答案

这是您正在使用的极差的编程实践。条件表达式应该有副作用;他们应该计算。您正在执行副作用,然后丢弃副作用!您应该 (1) 制作无副作用的版本:

id = (isChar && id > 121) ? 65 : id + 1;

或 (2) 将您的副作用版本写成语句,而不是表达式:

if (isChar && id > 121)
id = 65;
else
id++;

让我们更详细地看一下原始错误代码的这个简化版本有什么问题:

id = whatever ? 65 : id++;

假设 whatever 为假。会发生什么? id++ 在道德上等同于:

int PostIncrement(ref int x)
{
int temp = x;
x = temp + 1;
return temp;
}

假设你做了:

id = whatever ? 65 : PostIncrement(ref id);

会发生什么?假设 id 为 1。您通过引用将其传递给 PostIncrementPostIncrementtemp 中复制了 id 的值 - 1 -。然后它将 1 添加到那个 - 2 - 并将结果分配给 id。所以 id 现在是 2。然后它返回 1。

回到调用者,id 现在是 2,然后你分配 PostIncrement 的结果,它是 1,现在是 id又是 1。

不要使用 id++ 来表示 id + 1 因为那根本不是它的意思。

关于c# - 嵌套内联 IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com