【问题标题】:What is the OR operator in an IF statement什么是 IF 语句中的 OR 运算符
【发布时间】:2011-01-10 15:26:06
【问题描述】:

在 C# 中,我如何指定 OR:

if(this OR that) {do the other thing}

我在帮助中找不到。

更新:

我的代码是:

if (title == "User greeting" || "User name") {do stuff}

我的错误是:

错误 1 ​​运算符“||”不能应用于 'bool' 和 'string' 类型的操作数 C:\Documents and Settings\Sky View Barns\My Documents\Visual Studio 2005\Projects\FOL Ministry\FOL Ministry\Downloader.cs 63 21 FOL Ministry

【问题讨论】:

  • 真的很有趣,我见过的每个程序员(包括我自己)都认为这是实现它的有效方法。这是给你写更多的 if 语句。 :-)
  • @Dested :+1 表示注意到了这个常见的假设。直到我读到你的评论,我才记得因为同样的困惑,我花了两天时间对我的第一个 javascript 大喊大叫。似乎与许多其他异常处理程序和松散语言一样,这个非常合乎逻辑的假设现在已经成为一个框架。
  • 我想知道这是不是因为在英语中我们说,例如,“如果你的成绩是 A 或 B,你做得很好”,而不是“如果你的成绩是 A 或你的成绩是B,你做得很好。”只是看起来更自然。
  • @Anthony,我想知道有多少人试图思考对此有多少不同的解释,例如考虑一下是否有人想在其中抛出 null 或者可以被视为多种类型的东西,例如单个字符,它是一个可以是 int、char 或其他东西的数字。计算机和人类思维的复杂程度仍然不同。
  • 我认为这是因为您假设 == 运算符已重载以处理您未通过它的列表。

标签: c# conditional-operator


【解决方案1】:

或者是||

是&&

更新问题:

您需要在 if 语句的每个逻辑部分中指定要比较的对象。

if (title == "User greeting" || title == "User name") 
{
    // do stuff
}

【讨论】:

    【解决方案2】:

    OR 运算符是一个双管道:

    ||
    

    所以它看起来像:

    if (this || that) 
    {
      //do the other thing
    }
    

    编辑:您的更新尝试不起作用的原因是逻辑运算符必须分隔有效的 C# 表达式。表达式具有操作数,运算符和运算符具有优先顺序。

    在您的情况下,首先评估 == 运算符。这意味着您的表达式被评估为(title == "User greeting") || "User name"。 ||接下来被评估。由于||要求每个操作数都是布尔表达式,它会失败,因为您的操作数是字符串。

    使用两个单独的布尔表达式将确保您的 || 运算符能够正常工作。

    title == "User greeting" || title == "User name"
    

    【讨论】:

    • 这不是非法的 ;)。但是,是的,这是多余的。
    • @ChrisF - 考虑到他在发布后 12 分钟更新了它,我还没有机会看到它。
    • == 在 C# 中的优先级高于 || msdn.microsoft.com/en-us/library/aa691323(VS.71).aspx 这意味着它将表达式计算为 (title == "User greeting") || “用户名”是 bool ||细绳。如果它按照您的建议对其进行评估,则错误将是“CS0019: Operator '||'不能应用于'string'和'string'类型的操作数"
    【解决方案3】:

    条件或运算符是||:

    if (expr1 || expr2) {do stuff}
    
    if (title == "User greeting" || title == "User name") {do stuff}
    

    条件(OR)及其部分是布尔表达式。

    MSDN 在此处按优先顺序列出 C# 运算符 http://msdn.microsoft.com/en-us/library/6a71f45d.aspx布尔表达式的 MSDN 页面是 http://msdn.microsoft.com/en-us/library/dya2szfk.aspx

    如果您刚开始学习编程,您应该阅读介绍性文本或教程中的条件语句。这个似乎涵盖了大部分基础知识:http://www.functionx.com/csharp/Lesson10.htm

    【讨论】:

      【解决方案4】:

      请参阅 C# Operators 了解 C# 运算符,包括 OR 即 ||

      【讨论】:

        【解决方案5】:

        || 是 C# 中的条件 OR 运算符

        您可能很难找到它,因为很难搜索您不知道名称的东西。下次尝试在 Google 上搜索“C# Operators”并查看逻辑运算符。

        Here is a list 的 C# 运算符。

        我的代码是:

        if (title == "User greeting" || "User name") {do stuff};
        

        我的错误是:

        错误 1 ​​运算符“||”不可能是 适用于“bool”类型的操作数和 '字符串' C:\Documents and Settings\Sky 查看谷仓\我的文档\Visual Studio 2005\Projects\FOL 事工\FOL 部\Downloader.cs 63 21 FOL 事工

        您需要这样做:

        if (title == "User greeting" || title == "User name") {do stuff};
        

        OR 运算符以相同的方式计算两边的表达式。在您的示例中,您正在对表达式title == "User greeting"(一个布尔值)和表达式"User name"(一个字符串)进行操作。这些不能在没有强制转换或转换的情况下直接组合,这就是您收到错误的原因。

        此外,值得注意的是|| 运算符使用“短路评估”。这意味着如果第一个表达式的计算结果为 true,则不会计算第二个表达式,因为它不必是 - 最终结果将始终为 true。有时您可以在优化过程中利用这一点。

        最后一个快速说明 - 我经常用这样的嵌套括号编写条件句:

        if ((title == "User greeting") || (title == "User name")) {do stuff};
        

        这样我可以控制优先级,而不必担心操作的顺序。在这里可能有点矫枉过正,但当逻辑变得复杂时,它尤其有用。

        【讨论】:

        • 这就是答案。看看在 OR 的两边是如何比较 title 变量的,这就是你所缺少的。
        • 在谷歌上搜索特殊字符并不容易,这也很复杂。即使有引号。
        • Smith325:是的,当然,如果您知道要搜索的特殊字符,您就会知道原始问题的答案。 :)
        • 优秀的答案。你一步一步解释它的方式真的很有帮助。它使它变得非常简单。因此,如果您想使用 if 语句作为开/关开关,只需使用 if(false) { }
        【解决方案6】:

        你需要

        if (title == "User greeting" || title == "User name") {do stuff};
        

        【讨论】:

          【解决方案7】:

          为了完整起见,||和 && 是 | 的条件版本和 & 运算符。

          对 ECMA C# 语言规范的引用是 here

          来自规范:

          3 操作 x || y 对应于 操作 x | y,除了 y 是 仅当 x 为假时才进行评估。

          | 版本中,双方都进行了评估。

          条件版本短路评估,因此允许如下代码:

          if (x == null || x.Value == 5)
              // Do something 
          

          或者(没有双关语)使用你的例子:

          if (title == "User greeting" || title == "User name") 
              // {do stuff} 
          

          【讨论】:

            【解决方案8】:

            这是错误的原因:

            if (title == "User greeting" || "User name") {do stuff};
            

            是因为那句话是

            如果标题等于字符串“用户问候语”

            或者只是“用户名”(如果 title 等于字符串“用户名”,则不是)。你或之后的部分就像写

            if ("User name")
            

            哪个 c# 不知道该怎么做。它无法弄清楚如何从“用户名”中获取布尔值

            【讨论】:

              【解决方案9】:

              if 的格式

              if (this OR that) 
              

              thisthat 是表达式而不是值。 title == "aaaaa" 是一个有效的表达式。另外OR 不是 C# 中的有效构造,您必须使用 ||

              【讨论】:

                【解决方案10】:

                OR 用作“||”

                 if(expr1 || expr2)
                 {
                    do something
                 }
                

                【讨论】:

                  【解决方案11】:

                  在 C#9 中,我们现在可以在“is”条件检查中使用模式组合符“or”、“and”和“not”作为运算符。

                  See this 了解更多信息。

                  所以你的代码...

                  if (title == "User greeting" || "User name") {do stuff}
                  

                  ...可以直接写成:

                  if(title is "User greeting" or "User name") {do stuff}
                  

                  【讨论】:

                    【解决方案12】:

                    你应该使用equallike

                    if (title.Equals("User greeting") || title.Equals("User name")) 
                    { do stuff }
                    

                    【讨论】:

                    • 不需要,除非您使用指定比较的重载。这可能是个好主意
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-02-22
                    • 2021-06-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-03-06
                    • 1970-01-01
                    • 2019-02-10
                    相关资源
                    最近更新 更多