zoukankan      html  css  js  c++  java
  • C#6.0新语法

    一、自动属性初始化

    在以前的C#版本中,属性是这样写的:

    1 public int Id { get; set; }
    2 public string Name { get; set; }

    在C#6.0中,属性可以自动赋初始值,例如:

    复制代码
    1 public string Name { get; set; } = "summit";
    2 public int Age { get; set; } = 22;
    3 public DateTime BirthDay { get; set; } = DateTime.Now.AddYears(-20);
    4 public IList<int> AgeList
    5 {
    6       get;
    7       set;
    8 } = new List<int> { 10, 20, 30, 40, 50 };
    复制代码

     二、导入静态类

    我们都知道,使用静态类的方法时是使用类名.方法名的形式,例如:

    1 Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");

     这里的Math是框架自带的静态类,要使用Pow()方法,必须要向上面的代码一样。在C#6.0中可以用下面的方式使用静态类的方法,例如:

    1、使用using导入静态类

    2、导入静态类以后,可以像使用普通方法一样,直接使用,例如:

    1 Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");
    2 Console.WriteLine($"导入后可直接使用方法: {Pow(4, 2)}");

     三、字符串嵌入值

    在以前版本中,如果要对字符串就行格式化,要使用string.Format,例如:

    1 Console.WriteLine(string.Format("当前时间:{0}",DateTime.Now.ToString()));

    在C#6.0中,可以直接使用$进行字符串的嵌入了,例如:

    1 Console.WriteLine(string.Format("当前时间:{0}",DateTime.Now.ToString()));
    2 Console.WriteLine($"年龄:{this.Age}  生日:{this.BirthDay.ToString("yyyy-MM-dd")}");
    3 Console.WriteLine($"年龄:{{{this.Age}}}  生日:{{{this.BirthDay.ToString("yyyy -MM-dd")}}}");
    4 Console.WriteLine($"{(this.Age <= 22 ? "小鲜肉" : "老鲜肉")}"); 

    结果:

    四、空值运算符

    我们都知道,null值是不能调用ToString()方法的,会报“未将对象引用设置到对象实例”的错误,例如: 

    1 string name = null;
    2 Console.WriteLine(name.ToString());

     结果:

    在C#6.0中有了空值运算符,如果是null值也可以调用ToString()方法了,这时程序什么都不会输出,例如:

    1 int? iValue = 10;
    2 Console.WriteLine(iValue?.ToString());//不需要判断是否为空
    3 string name = null;
    4 Console.WriteLine(name?.ToString()); // 程序不会报错,也不会输出任何值
    5 Console.WriteLine("空值运算符");

     结果:

    这样就不需要像以前一样先判断一下变量是不是null值了。

    五、对象初始化器

    在前面一篇文章中讲过一次C#语法糖,在那里讲过对象初始化器和集合初始化器,以前初始化字典集合要像下面的方式:

    复制代码
     1 IDictionary<int, string> dictOld = new Dictionary<int, string>()
     2 {
     3         { 1,"first"},
     4         { 2,"second"}
     5 };
     6 // 循环输出
     7 foreach(KeyValuePair<int,string> keyValue in dictOld)
     8 {
     9         Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");
    10 }
    复制代码

    结果:

    在C#6.0中,可以通过索引的方式给字段进行初始化,例如:

    复制代码
     1 IDictionary<int, string> dictNew = new Dictionary<int, string>()
     2 {
     3        [4] = "first",
     4        [5] = "second"
     5 };
     6 // 循环输出
     7 foreach (KeyValuePair<int, string> keyValue in dictNew)
     8 {
     9         Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");
    10 }
    复制代码

     结果:

    六、异常过滤器

    在以前的版本中,捕获异常通常使用try{}catch(),只要是发生了异常,就会进入到catch里面,例如:

    复制代码
    1 try
    2 {
    3         Int32.Parse("we");
    4 }  
    5 catch(Exception ex)
    6 {
    7         Console.WriteLine(ex);
    8 }
    复制代码

     结果:

    在C#6.0中,可以设置在满足某种条件的情况下,才能进入异常捕获,例如:

    复制代码
    1 int exceptionValue = 10;
    2 try
    3 {
    4        Int32.Parse("s");
    5 }
    6 catch (Exception e) when (exceptionValue > 1)//满足条件才进入catch
    7 {
    8        Console.WriteLine("catch");
    9 }
    复制代码

     结果:

    七、nameof表达式

    我们以前使用过typeof,typeof()可以获取类型,nameof表达式和typeof一样的,例如:

    1 Console.WriteLine(nameof(peopleTest)); //获取peopleTest这个字符串
    2 Console.WriteLine(nameof(People));
    3 Console.WriteLine(nameof(CSharpSix));

    结果:

    应用场景:打印日志的时候打印出参数的值,如果方法里面参数的名称改了,而日志里面写的还是原来参数的名称,这样就会导致不一致,使用了nameof可以保证日志里面的参数名称和方法里面的参数名称一致。

    八、在属性/方法里面使用Lambda表达式

    1 public string NameFormat => string.Format("姓名: {0}", "summit");
    2 public void Print() => Console.WriteLine(Name);

    在Main()方法里面调用:

    1 CSharpSix six = new CSharpSix();
    2 Console.WriteLine(six.NameFormat);
    3 six.Print();

    结果:

  • 相关阅读:
    maven -- 问题解决(四)警告Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER will not be exported or published
    maven -- 问题解决(三)Java compiler level does not match the version of the installed Java project facet
    mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
    mybatis学习笔记(三)-- 优化数据库连接配置
    mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
    mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程)
    c# -- 解决vs使用本地iis运行项目支持局域网访问的问题(附防火墙端口开放步骤)
    sqlserver -- 查看当前数据库的数据表(备忘)
    sqlserver -- 解决sqlserver2008“Prevent saving changes that require table re_creation(阻止保存要求重新创建表的更改)”的问题
    关于mysql 5.7版本“报[Err] 1093
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9819717.html
Copyright © 2011-2022 走看看