c# - 这个短路的 if 语句有什么问题?

标签 c#

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

如果我在控制台输入 12,第一个 if 语句失败,但如果我首先将结果存储在 bool 中,第二个语句通过。为什么?我可能在这里做了一些愚蠢的事情?

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 语句,我不得不用 && 而不是 ||,但这很令人困惑,因为我读它是这样的:如果 amOrPm 不等于 1amOrPM 不等于 2,然后转到控制台行。我读错了这个定义吗?

最佳答案

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

你的意思是:

if (amOrPM != "1" && amOrPM != "2") 

(如果它“不是 1”并且它是“不是 2”。)

或者:

if (!(amOrPm == "1" || amOrPm == "2"))

参见 De Morgan's Laws进行更多转换。

关于c# - 这个短路的 if 语句有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403116/

相关文章:

C# 从今天的日期获取下一个第 N 个星期五的日期

c# - blazor wasm 应用程序中运行时的程序集构建版本

c# - 获取整数中的数字

c# - 标签目标扩展器

c# - NpgSQL 只返回表的第一列名称

c# - 如何配置 NLog 以写入 Azure 应用服务的日志流?

c# - 有没有更好的方法将任意输入转换为 ASCII?

c# - 如何在 WPF 弹出窗口中放置 close [x]

c# - 如何在 Visual Studio 中找到 Team Foundation Server 的 url?

时间:2019-03-17 标签:c#DynamicWhereclauseinalambda