CSDN说明:

条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。

件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数

同时我们还要了解到  || 和 && 都是左结合性的逻辑运算符,所以看下面的例子

class Program
    {
        static void Main(string[] args)
        {
            int a = 9;
            int b = 10;
            int c = 11;
            int d = 12;
            if (d>b || c > b && a>b)
            {
                Console.WriteLine("true");
            }
            Console.ReadKey();
        }
    }

所以在判断到d>b为true时,后面的部分c > b && a>b就不会再运算,进入条件语句里面


更正:

上面的结果原因是由于 && 的优先级高于 || ,所以上面的条件相当于 d>b || (c>b && a>b) 。在看一个例子

 if ( a > b && c > b || d > b)
{
Console.WriteLine("true");
}

上面这个结果也是ture,以为上面的条件相当于 (a>b && c>b) || d>b。

上面我们已经知道了&& 的优先级高于 || ,那么下面我们通过两位一种方式看看 && 和 || 的短路特性(就是开篇CSDN说明:中说的特性)及其的结合性。

看下面的代码

 class Program
{
static int trueTimes = ;
static int falseTimes = ;
static bool GetTrue()
{
Console.WriteLine("Execute GetTrue():" + trueTimes++);
return true;
} static bool GetFalse()
{
Console.WriteLine("Execute GetFalse():" + falseTimes++);
return false;
} static void Main(string[] args)
{
Console.WriteLine(GetTrue() && GetTrue() || GetFalse());
Console.ReadKey(); } }

输出结果为

Execute GetTrue():1
Execute GetTrue():2
True

分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetTrue()时,还会执行第二个GetTrue()才能确定真个表达式为真,其实对于 || 后面的方面,就会被短路,不被执行,因为前面的结果已经可以证明整个表达式为True。

我们再换个逻辑表达式

 static void Main(string[] args)
{
Console.WriteLine(GetFalse() && GetTrue() || GetFalse());
Console.ReadKey(); }

输出结果为

Execute GetFalse():1
Execute GetFalse():2
False

分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetFalse()时,(GetTrue() && GetTrue() )就一定为假,所以后面的GetTrue()不会执行,被短路,这个里面我们也可以看出&& 和 || 是从左到右的结合方式,这个时候我们必须继续执行||后面的逻辑,才能确认整个表达式是真是假,所以GetFalse会被执行。

上面是我这边的更正,如果有错误或疏忽之处,望不惜赐教!

C# 条件与&&与条件或||的使用总结的更多相关文章

  1. shell脚本进阶之条件测试与条件语句

       接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试    在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...

  2. 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理

    在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...

  3. PHPlaravel中从数据库中选择数据是增加时间条件及各种条件

    注:附加条件后要加get函数. 1.public function getForDataTable($startTime,$endTime){ return $this->query() -&g ...

  4. yii2:多条件多where条件下碰到between时,between语句如何处理呢?

    yii2:多条件多where条件下碰到between时,between语句如何处理呢? 我有一张表:id,name,telphone,ticket_no,status,create_time等字段, ...

  5. Excel_PoweQuery——条件计数、条件求和

    岁月不居,时节如流. 时光荏苒,岁月如梭. 前面两段充分体现了博主深厚的文学素养,别和博主争,博主说啥就是啥. 其实,对于大量数据的处理,这几年微软Office做的不单单是2007的时候把Excel的 ...

  6. 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)

    SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...

  7. 谈谈raft fig8 —— 迷惑的提交条件和选举条件

    谈谈raft fig8 -- 迷惑的提交条件和选举条件 前言 这篇文章的思路其实在两个月前就已经成型了,但由于实习太累了,一直没来得及写出来.大概一个月前在群里和群友争论fig8的一些问题时,发现很多 ...

  8. mybatis——逆向工程中 where (条件1)and (条件2 or 条件3 or 条件4)

    where (条件1)and (条件2 or 条件3 or 条件4) = where (条件1 and 条件2)or (条件1 and 条件3) or (条件1 and 条件4) 结果 是这样的 WH ...

  9. 转:SQL:外连接on条件与where条件的区别

    原文地址:http://hi.baidu.com/benben1006/blog/item/187deb77bc0e5319b151b974.html 数据库在通过连接两张或多张表来返回记录时,都会生 ...

  10. SQL中on条件与where条件的区别(转载)

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

随机推荐

  1. AD 域复制FRS 迁移到DFSR

    假设您尝试将在先前版本的Windows Server上运行的某个Active Directory域控制器(DC)升级到Windows Server 2019. 您可能会看到以下错误: “副本验证失败. ...

  2. jspscriptlet标签

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  3. 2017.10.1 QBXT 模拟赛

    题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...

  4. SAP CRM和C4C的客户主数据修改历史记录查询

    SAP CRM 随便修改一个字段,比如给Search Term维护值"webpack": Change History assignment block里显示出了这条修改记录: 根 ...

  5. itextsharp-5.2.1-修正无法签名大文件问题

    PDF文件格式几乎是所有开发平台或者业务系统都热爱的一种文档格式. 目前有很多优秀的开源PDF组件和类库.主要平时是使用.NET和Java开发,所以比较偏好使用iText,当然,它本身就很强大.iTe ...

  6. UVA 10537 Toll! Revisited (逆推,最短路)

    从终点逆推,d[u]表示进入u以后剩下的货物,那么进入u之前的货物数量设为y,d[u] = x,那么y-x=ceil(y/20.0)=(y-1)/20+1=(y+19)/20. (y-x)*20+r= ...

  7. UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)

    由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显 ...

  8. eubacteria|endosymbiosis|基因转移

    5.11线粒体和叶绿体是通过内共生进化而来的 初始细胞俘获有功能的真细菌(eubacteria)进入细胞内,该细菌逐渐演化为细胞器,这种现象称为内共生(endosymbiosis),所以该细胞器携带细 ...

  9. ssh整合思想 Spring与Hibernate和Struts2的action整合 调用action添加数据库 使用HibernateTemplate的save(entity)方法 update delete get 等方法crud操作

    UserAction类代码: package com.swift.action; import com.opensymphony.xwork2.ActionSupport; import com.sw ...

  10. JS正则表达式学习总结

    JS正则:java RegExp对象,它是对字符串执行模式匹配的强大工具.运用最多的就是在输入处验证输入的字符串是否合法,指定用户输入字符串的格式. 定义方法: 1:直接量语法:var re=/pat ...