C# 这个短路if语句有什么问题?

C# 这个短路if语句有什么问题?,c#,C#,我知道这可能真的很愚蠢,但我不明白为什么这个if语句失败了: 如果我在控制台中输入1或2,则第一条If语句失败,但如果我首先将结果存储在bool中,则第二条If语句通过。为什么?我可能在做些傻事 Console.WriteLine("Enter 1 for AM or 2 for PM?"); string amOrPM = Console.ReadLine(); //Why does this fail if I enter 1 or 2? if (amOrPM != "1" || amO

我知道这可能真的很愚蠢,但我不明白为什么这个if语句失败了:

如果我在控制台中输入
1
2
,则第一条If语句失败,但如果我首先将结果存储在bool中,则第二条If语句通过。为什么?我可能在做些傻事

Console.WriteLine("Enter 1 for AM or 2 for PM?"); 
string amOrPM = Console.ReadLine();

//Why does this fail if I enter 1 or 2?
if (amOrPM != "1" || amOrPM != "2") 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again.");

//This works!
bool valid = (amOrPM != "1" || amOrPM != "2"); 
if (!valid) 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again.");

我刚刚注意到,对于第一个if语句,我必须将&&而不是| |,但这令人困惑,因为我将其理解为:if
amOrPm
不等于
1
amOrPm
不等于
2
,然后转到控制台行。我对这个定义的理解是错误的吗?

这样想——如果它是1,那么它不可能是2,反之亦然。因此,它肯定是“不是1”或“不是2”

你的意思是:

if (amOrPM != "1" && amOrPM != "2") 
(如果不是1,也不是2。)

或:


有关更多转换,请参阅。

这样想-如果它是1,那么它不可能是2,反之亦然。因此,它肯定是“不是1”或“不是2”

你的意思是:

if (amOrPM != "1" && amOrPM != "2") 
(如果不是1,也不是2。)

或:


有关更多转换,请参阅。

如果(amOrPM!=“1”和&amOrPM!=“2”),则正确的方法是
。如果既不是1也不是2,你就要写。第二个之所以有效,是因为它是否定的,它要么是1要么是2。

如果(amOrPM!=“1”&&amOrPM!=“2”)
,正确的事情应该是
。如果既不是1也不是2,你就要写。第二个有效,因为它是否定的,它不是1就是2。

你得到了!在第二种情况下,在valid前面-您正在反转结果。把它拿走!而且他们的行为都一样。

你得到了!在第二种情况下,在valid前面-您正在反转结果。把它拿走!它们的行为都相同。

Or是逻辑Or。它的意思是:

如果输入1,则第一个条件为false,但第二个条件为true,因此失败


如果输入2,则第一个条件为true,但第二个条件为false,因此失败。对于这两种情况,条件都不可能为假。

或是逻辑Or。它的意思是:

如果输入1,则第一个条件为false,但第二个条件为true,因此失败


如果输入2,则第一个条件为true,但第二个条件为false,因此失败。这两个条件都不可能为假。

amOrPM!=“1”| | amOrPM!=“2”
将始终为真。如果(amOrPM!=“1”和&amOrPM!=“2”)与
相同,您不想
吗!(amOrPM==“1”和&amOrPM==“2”)
。向你学习德摩根定律。谢谢你,斯克鲁姆,我相信
这个词会把我甩在这里。当我看到它时,我在想
amOrPM
应该等于1和2才是真的。@Xaisoft-No,因为您正在使用!=而不是==。amOrPM不等于1和2
amOrPM!=“1”| | amOrPM!=“2”
将始终为真。如果(amOrPM!=“1”和&amOrPM!=“2”)与
相同,您不想
吗!(amOrPM==“1”和&amOrPM==“2”)
。向你学习德摩根定律。谢谢你,斯克鲁姆,我相信
这个词会把我甩在这里。当我看到它时,我在想
amOrPM
应该等于1和2才是真的。@Xaisoft-No,因为您正在使用!=而不是==。amOrPM不等于1和2OK,这会清除它。我想让我不舒服的是单词
,当我看到这个时,我想
amOrPM
可以因为某种原因同时有两个值。好了,这就把它清除了。我想让我感到不舒服的是单词
,当我看到这一点时,我想
amOrPM
可以因为某种原因同时有两个值。