C#6.0特性(快来围观)

1、自动属性的增强

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

C#4.0下的果断实现不了的。

C#6.0中自动属性的初始化方式

只要接触过C#的肯定都会喜欢这种方式。真是简洁方便呀。

1.2、只读属性初始化Getter-only auto-properties

先来看一下我们之前使用的方式吧

    public class Customer
    {
        public string Name { get; }

        public Customer(string firstName,string lastName)
        {
            Name = firstName +" "+ lastName;
        }
    }

再来看一下C#6.0中

    public class Customer
    {
        public string FirstName { get; }="aehyok";
        public string LastName { get; }="Kris";

    }

和第一条自动属性初始化使用方式一致。

2、Expression bodied function members

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

public Point Move(int dx, int dy) => new Point(x + dx, y + dy);  

再来举一个简单的例子:一个没有返回值的函数

public void Print() => Console.WriteLine(FirstName + " " + LastName);

2.2、Lambda表达式用作属性Expression bodies on property-like function members

        public override string ToString()
        {
            return FirstName + " " + LastName;
        }

现在C#6中

    public class User
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public override string ToString() => string.Format("{0}——{1}", FirstName, LastName);

        public string FullName => FirstName + " " + LastName;
    }

3、引用静态类Using Static 

在Using中可以指定一个静态类,然后可以在随后的代码中直接使用静态的成员

4、空值判断Null-conditional operators  

直接来看代码和运行结果

通过结果可以发现返回的都为null,再也不像以前那样繁琐的判断null勒。

5、字符串嵌入值   

在字符串中嵌入值

之前一直使用的方式是

现在我们可以简单的通过如下的方式进行拼接

6、nameof表达式nameof expressions 

在方法参数检查时,你可能经常看到这样的代码(之前用的少,这次也算学到了)

        public static void AddCustomer(Customer customer)
        {
            if (customer == null)
            {
                throw new ArgumentNullException("customer");
            }
        }

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

        public static void AddCustomer(Customer customer)
        {
            if (customer == null)
            {
                throw new ArgumentNullException(nameof(customer));
            }
        }

7、带索引的对象初始化器Index initializers   

直接通过索引进行对象的初始化,原来真的可以实现

通过这种方式可以发现字典中只有三个元素,所以也就只有这三个索引可以访问额,其他类型的对象和集合也是可以通过这种方式进行初始化的,在此就不进行一一列举了。

8、异常过滤器 (Exception filters)  

先来看一个移植过来的方法

            try
            {
                var numbers = new Dictionary<int, string> {[7] = "seven",[9] = "nine",[13] = "thirteen" };
            }
            catch (ArgumentNullException e)
            {
                if (e.ParamName == "customer")
                {
                    Console.WriteLine("customer can not be null");
                }
            }

在微软的文档中还给出了另一种用法,这个异常会在日志记录失败时抛给上一层调用者

        private static bool Log(Exception e)
        {
            ///处理一些日志
            return false;
        } 

        static void Main(string[] args)
        {

            try
            {
                ///
            }
            catch (Exception e){if (!Log(e))
                {

                }
            }

            Console.ReadLine();
        }

9、catch和finally 中的 await —— Await in catch and finally blocks

在C#5.0中,await关键字是不能出现在catch和finnaly块中的。而在6.0中

            try
            {
                res = await Resource.OpenAsync(…); // You could do this. …
            }
            catch (ResourceException e)
            {
                await Resource.LogAsync(res, e); // Now you can do this …
            } finally
            {
                if (res != null)
                    await res.CloseAsync(); // … and this.
            } 

10、无参数的结构体构造函数—— Parameterless constructors in structs 

(摘自:http://www.cxyclub.cn/n/63739/

时间: 2024-10-03 20:42:36

C#6.0特性(快来围观)的相关文章

C#3.0 特性

C#3.0特性 隐式类型的本地变量和数组 对象初始值设定项 集合初始值设定项 扩展方法 匿名类型 lambda表达式 查询关键字 自动实现的属性 分布方法定义 https://msdn.microsoft.com/zh-cn/library/bb383815(v=vs.90).aspx

JDK5.0 特性线程 同步装置之CountDownLatch 同步装置之CyclicBarrier 线程 BlockingQueue

来自:http://www.cnblogs.com/taven/category/475298.html 1 import java.util.concurrent.CountDownLatch; 2 import java.util.concurrent.ExecutorService; 3 import java.util.concurrent.Executors; 4 5 /** 6 * CountDownLatch维护一个计数器,等待这个CountDownLatch的线程必须等到计数器为

JDK5.0 特性-线程同步装置之Semaphore

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291474.html 1 import java.util.ArrayList; 2 3 import java.util.concurrent.ExecutorService; 4 5 import java.util.concurrent.Executors; 6 7 import java.util.concurrent.Semaphore; 8 9 import java.util.

JDK5.0 特性-线程 Condition

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291471.html 1 import java.util.concurrent.ExecutorService; 2 3 import java.util.concurrent.Executors; 4 5 import java.util.concurrent.locks.Condition; 6 7 import java.util.concurrent.locks.Lock; 8 9

JDK5.0 特性-线程锁Lock

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291470.html 1 import java.util.concurrent.ExecutorService; 2 3 import java.util.concurrent.Executors; 4 5 import java.util.concurrent.Future; 6 7 import java.util.concurrent.locks.Lock; 8 9 import j

快递即将迎来4.0时代快收即将爆发

快递即将迎来4.0时代快收即将爆发  经历各种电商平台数年来的激战和双十一激战之后,电商行业早已彻底红火.快递与电商是共同成长的相联系行业,一样也要面对着升级与改造.快递行业1.0时代,各地城市的中转站需要充足的人员才可以确保配送准时到达:到了2.0时代,经营系统成为核心内容,通过比较智能化的经营和调整,令快递效率明显提高:而随着电商行业的飞速进步和移动化的态势,基于移动互联网平台“不需快递员”的快递业4.0时代正在到来.  特殊是今年以来,我国产生了一批如快收.瑞丰快递等同城快收,通过网络众包

JDK5.0 特性-线程任务执行架构 ScheduledExecutorService

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291469.html 1 import java.util.concurrent.Callable; 2 3 import java.util.concurrent.ExecutionException; 4 5 import java.util.concurrent.ExecutorService; 6 7 import java.util.concurrent.Executors; 8

JDK5.0特性,使用ProcessBuilder执行本地命令

1 import java.io.BufferedReader; 2 3 import java.io.BufferedWriter; 4 5 import java.io.File; 6 7 import java.io.IOException; 8 9 import java.io.InputStream; 10 11 import java.io.InputStreamReader; 12 13 import java.io.OutputStreamWriter; 14 15 import

JDK5.0特性-线程 Callable和Future

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291466.html 1 import java.util.concurrent.Callable; 2 3 import java.util.concurrent.ExecutorService; 4 5 import java.util.concurrent.Executors; 6 7 import java.util.concurrent.Future; 8 9 10 11 /**

Servlet 3.0 特性详解

Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍. 零:Servlet 3.0 特性概述 1)异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自