Essential C# 6.0 C#学习笔记 第三章 操作符和控制流

Essential C# 6.0 学习笔记

由于博主对C#的使用比较多,但是对C#的理解还是停留在表面,所以开创此系列篇章,详细记录在学习Essential C# 6.0 这本书时候遇到的问题,以及优秀的知识点的记录,还有自己对一些知识点的理解以及拓展。

该系列文章绝不是简单的阐述概念,而是将知识点互相串通,融入使用。欢迎大家关注,文章会持续更新!!!


第三章 操作符和控制流

在这里插入图片描述


1.C++与C#求值顺序

C++求值顺序
在C++中,x=1
对于M(x++,x++)这样的调用,可能是出现M(1,2)也可能是M(2,1),具体右编辑器决定
但是C#,只会调用M(1,2),因为C#做出了两点保证
第一:传给调用的实参总是从左向右计算
第二:总是先将被递增的值赋给变量,再使用表达式的值
这两点在C++中都不能得到保证

注意:
在C\C++和C#之间移植使用递增和递减操作符的代码时候要小心;
他们遵循不同的规则

另外注意,Switch语句,C++会自动“贯穿”至下一个switch小节,但是C#中不会

2.空接合操作符

空接合操作符(null coalescing operator) ?? 能简单地表示“如果这个值为空,就使用另一个值”。

其形式如下:expression1 ?? expression2

??操作符支持短路求值。如果expression1不为null, 就返回expression1的值, 不对另一个表达式求值。如果expression1求值null,就返回expression2的值。 和条件操作符不同,空接合操作符是二元操作符。

扫描二维码关注公众号,回复: 14133211 查看本文章

如果firstName为null,就用空接合操作符将fullName设为"Jack",如果firstName不为null,fullName将获得firstName的值。

空结合操作符能完美地“链接”。例如,对于表达式x ?? y ?? z,如果x不为null将返回x;否则,如果y不为null将返回y;否则返回z。也就是说,从左向右选出第一个非空表达式。如果之前所有表达式都为空,就选择最后一个表达式。

空结合操作符是C#2.0和可空值类型一起引入的,它的操作数既可以是可空值类型,也可以是引用类型。

    static void Main(string[] args)
    {
    
    
        string firstName = null;
        string fullName = firstName ?? "Jack";
        Console.WriteLine(fullName);

    }

在这里插入图片描述

3.null条件操作符

在调用值为null的方法时,运行时都会抛出一个System.NullReferenceException的异常,通常以此表明程序逻辑上存在错误。考虑到在调用成员之要前进行null值检查这一模式的频率很高,C# 6.0引入了一种更为简化的null条件操作符( null-conditionoperator) ?. 。

比如说,下面两句代码结果一模一样
在这里插入图片描述

    private delegate void delegate_Func (int x,int y);  //定义了一个委托类型,这个委托类型的名字叫做Func
    static void Main(string[] args)
    {
    
    
        delegate_Func delegate_Func=null;


        if (delegate_Func != null)
        {
    
    
            delegate_Func.Invoke(1, 2);
        }

        delegate_Func?.Invoke(1, 2);

    }
    static void GetMax(int x,int y)
    {
    
    
        Console.WriteLine( Math.Max(x, y));
    }

4.计算字节的值

在这里插入图片描述

在这里插入图片描述

总结

本章提到了介绍了C#赋值和算数操作符,以及const关键字声明常量表达式

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/124526749