C#6.0新特性

原创 2016年08月31日 15:20:05

http://files.cnblogs.com/files/aehyok/VS2015CSharp6.0.pdf

一、自动属性初始化

Old:

    public class User
    {
        private bool _isEnabled = true;
        public bool IsEnabled
        {
            get { return _isEnabled; }
            set { _isEnabled = value; }
        }
    }

New:

    public class User
    {
        public bool IsEnabled { get; set; } = true;//这样就不用另外写一个字段给他赋默认值,直接给属性赋默认值
    }

二、只读属性的初始化:

Old:

    public class User
    {
        private readonly int _id;
        public int Id
        {
            get { return _id; }
        }

        public User(int id)
        {
            _id = id;
        }
    }
New:

public class User
    {
        public int Id { get; }
        public User1(int id)
        {
            Id = id;
        }
    }//只读属性可以和标了<strong>readonly</strong>的字段一样在构造函数里面赋值。
三、用Lambda作为函数体
Old:

    public class User
    {
        public int Id { get; }
        public string Name { get; set; }
        public override string ToString()
        {
            return string.Format("Id:{0} Name:{1}", Id, Name);
        }
    }
New:

    public class User
    {
        public int Id { get; }
        public string Name { get; set; }
        public override string ToString() => string.Format("Id:{0},Name:{1}", Id, Name);//平时总是有一些短小精悍的代码,但我们不得不把他们
        //放到两个括号中,现在我们可以这么写
    }

四、Lambda表达式用作属性 

Old:

    public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName {
            get { return string.Format("{0} {1}", FirstName, LastName); }
        }
    }
New:

    public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName=>string.Format("{0} {1}", FirstName, LastName);
    }
五、字符串嵌入值 

    public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName => $"{FirstName} {LastName}";
        //public string FullName => "\{FirstName} \{LastName}";
    }

六、Using静态类

如果一个静态类里面是一堆方法,比如Math 可以不用写类名,直接调用他的静态方法

七、空值判断

在C#6.0中,我们可以这样写

如果对象为空,则整个表达式的值为空。后面的成员访问不限于方法,还可以是属性,索引器等。

八、nameof表达式

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

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

九、带索引的对象初始化器 

对象初始化器在C#3.0就已经有了,C#6.0的对象初始化器加入了对索引器的支持,使得字典一类的东西也可以轻松初始化

     var numbers = new Dictionary<int, string>
            {
                [7] = "s",
                [9] = "b",
                [13] = "f"
            };
            var obj = new JObject()
            {
                ["firstName"] = "test",
                ["lastName"] = "fff"
            };


十、异常筛选器

       static void Main(string[] args)
        {
            string f = "1";
            try
            {
                AddToRole("");
            }
            catch (ArgumentException ex) when(f!="2")
            {

                Console.WriteLine("ff");
            }

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

十一、catch和finally 中的 await 


十二、无参数的结构体构造函数

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

调用:







版权声明:本文为博主原创文章,未经博主允许不得转载。

C#属性简写用法 {get;set}

话说我用C# 都工作两年了,竟然看到了一个陌生的奇怪的属性用法,特地记录一下,如下: public bool Skidding { get; private set; } publi...
  • narutojzm1
  • narutojzm1
  • 2016年03月02日 21:08
  • 3804

C#6.0中10大新特性的应用和总结

微软发布C#6.0、VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家。 微软于2015年7月21日发布了Visual Studio...
  • mss359681091
  • mss359681091
  • 2017年01月12日 14:04
  • 2394

VS2015 C#6.0 中的那些新特性

VS2015 C#6.0 中的那些新特性 前言       VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需...
  • liuhhaiffeng
  • liuhhaiffeng
  • 2016年05月04日 08:38
  • 722

C#6.0的语法<一>

一、自动初始化属性: 确实这个比之前的版本简化了一下,不过你肯定很好奇,到底编译器给我们做了哪些东西呢? class Student { public string Name { get;...
  • symbian007
  • symbian007
  • 2015年01月05日 22:10
  • 712

【C#】开发的两个基本编程原则的深入讨论--为什么要用get,set,直接用public string Name不行吗

使用属性,避免将数据成员直接暴露给外界    学习研究.NET的早期,经常碰到一些学习C#/.NET的朋友问,要属性这种华而不实的东西做什么?后来做项目时也时常接到team里的人的抱怨反馈,为什...
  • catshitone
  • catshitone
  • 2014年06月12日 15:32
  • 1096

C# 属性 set与get方法

为了更好的隐藏数据成员,将对数据成员的存储与访问分离开,避免直接访问可能造成的错误,同时又具备使用数据成员的灵活性,我们用到了属性。对于属性的读写我们用到set和get。通过set方法来设置属性,ge...
  • jl1134069094
  • jl1134069094
  • 2016年01月13日 16:07
  • 2796

C#各版本新特性

C# 2.0 泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类、方法中对使用的类型进行参数化。 例如,这里定义了一个泛型类: class MyCollecti...
  • paxhujing
  • paxhujing
  • 2016年08月23日 13:29
  • 4640

Android6.0和7.0新特性分析

Android N已经发布有段时间,甚至马上都要发布Android 7.1,相信不少玩机爱好者已经刷入最新的Android N 7.1 Beta ROM 体验起来,即使你没有能够刷入的设备,通过模拟器...
  • lanxingfeifei
  • lanxingfeifei
  • 2017年01月03日 15:32
  • 23935

Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系 1 2. paip.----------...
  • attilax
  • attilax
  • 2014年12月18日 22:37
  • 5894

不得不说的Android6.0新特性

*Android6.0简介:*Android6.0称为Marshmallow(棉花糖),在2015年Google的I/O大会上正式发布,至今已经有一年多了,所占市场份额在2.3%以上,更新了比较多的模...
  • qq_33923079
  • qq_33923079
  • 2016年12月02日 00:33
  • 2832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#6.0新特性
举报原因:
原因补充:

(最多只允许输入30个字)