• C#6.0新特性


    自动属性初始化 (Initializers for auto-properties)

    以前我们是这么写的

    为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写

     

    自动属性初始化 (Initializers for auto-properties)

    以前我们是这么写的

    为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写

    只读属性的初始化(Getter-only auto-properties)

    像用户ID这种只读属性,我们以前是这样写的

    现在我们可以这样写

    用Lambda作为函数体 (Expression bodies on method-like members)

    平时总是有一些短小精悍的代码,但我们不得不把他们放到两个括号中,现在我们可以这么写

    空值判断 (Null-conditional operators)

    再举个例子,我们要获取一个列表的长度

    这种写法真是太恶心了,在C#6.0中,我们可以这样写

    从这里也可以看出这种操作符的一个规则:如果对象为空,则整个表达式的值为空。

    后面的成员访问不限于方法,还可以是属性,索引器等。

    给个实际应用的例子,在触发事件时,经常见到这样的写法,一个委托在调用前总是要判断是否为空

    现在我们可以这样

    如果PropertyChangednull,那这句就什么也不做。

    nameof表达式 (nameof expressions)

    在方法参数检查时,经常会见到这样的代码

    里面有那个role是我们手写的字符串,在给role改名时,很容易把下面的那个字符串忘掉,C#6.0解决了这个问题,看看新写法

     关于String.Format()方法的改进

    这是经典写法

                return String.Format("({0}, {1})", X, Y);

    接下来一步步简化(先将String.Format用一个$代替)

                return $"({0}, {1})", X, Y);

    然后将0,1两个占位符直接换成X,Y

    return $"({X}, {Y})";

    好的化简完成。

    catch和finally 中的 await (Await in catch and finally blocks)

    这是另一个和异常相关的特性,使得我们可以在catch 和finally中等待异步方法,看微软的示例

    无参数的结构体构造函数 (Parameterless constructors in structs)

    在之前版本的C#中是不允许结构体拥有无参构造函数的,在C#6.0中是允许的,但需要注意一点,通过new得到的结构体会被调用构造函数,而通过default得到的不会调用

    看看这个例子

    首先是一个结构体,通过两种不同的方式创建,然后输出

     

  • 相关阅读:
    hack games
    Metasploit 使用简介
    Back Track5学习笔记
    Metasploit没有db_autopwn命令的解决办法
    BT5 set_config各个选项的配置
    c# 截屏
    c#图像计算知识
    游戏代码
    Google Protocol Buffers (一个客户端与服务器协议生成工具)
    WinPcap抓取数据包
  • 原文地址:https://www.cnblogs.com/yexiaoyanzi/p/7027928.html
Copyright © 2020-2023  润新知