这是C6.0才出现的新特性。 用起来必须输入string.Fromat,使用{0}占位符,必须按照0,1,2,3,…循序来格式化,有时候会出现多个占位符,这一点比较容易出错。 $的用法相对轻松,不易出错。 除了$用法,C6.0还发布了这些新特性和功能: C 在 3.0 版和 5.0 版对面向对象的语言添加了主要的新功能。 版本 6.0 随 Visual Studio 2015 一起发布,通过该版本,它不再推出主导性的杀手锏,而是发布了很多使得 C 编程更有效率的小功能。 以下介绍了部分功能: 其他新功能包括: 这些功能每一个都很有趣。 但从整体来看,可以发现一个有趣的模式。 在此版本中,C 消除语言样本,让代码更简洁且更具可读性。 所以对喜欢简洁代码的用户来说,此语言版本非常成功。 除了发布此版本,他们还做了另一件事,虽然这件事本身与传统的语言功能无关。 他们发布了Roslyn 编译器即服务。 C 编译器现在是用 C 编写的,你可以使用编译器作为编程工作的一部分。 在以前的C版本中,属性是这样写的: 在C6.0中,属性可以自动赋初始值,例如: 我们都知道,使用静态类的方法时是使用类名.方法名的形式,例如: 这里的Math是框架自带的静态类,要使用Pow()方法,必须要向上面的代码一样。在C6.0中可以用下面的方式使用静态类的方法,例如: 1、使用using导入静态类 2、导入静态类以后,可以像使用普通方法一样,直接使用,例如: 在以前版本中,如果要对字符串就行格式化,要使用string.Format,例如: 在C6.0中,可以直接使用$进行字符串的嵌入了,例如: 结果: 我们都知道,null值是不能调用ToString()方法的,会报未将对象引用设置到对象实例的错误,例如: 结果: 在C6.0中有了空值运算符,如果是null值也可以调用ToString()方法了,这时程序什么都不会输出,例如: 结果: 这样就不需要像以前一样先判断一下变量是不是null值了。 在前面一篇文章中讲过一次C语法糖,在那里讲过对象初始化器和集合初始化器,以前初始化字典集合要像下面的方式: 结果: 在C6.0中,可以通过索引的方式给字段进行初始化,例如: 结果: 在以前的版本中,捕获异常通常使用try{}catch(),只要是发生了异常,就会进入到catch里面,例如: 结果: 在C6.0中,可以设置在满足某种条件的情况下,才能进入异常捕获,例如: 结果: 我们以前使用过typeof,typeof()可以获取类型,nameof表达式和typeof一样的,例如: 结果: 应用场景:打印日志的时候打印出参数的值,如果方法里面参数的名称改了,而日志里面写的还是原来参数的名称,这样就会导致不一致,使用了nameof可以保证日志里面的参数名称和方法里面的参数名称一致。 在Main()方法里面调用: 结果:ar s = string.Fromat("{0}+{1}={2}",12,23,12+23)
var s = $"{12}+{23}={12+23}"
1.自动属性初始化
publicintId{get;set;}publicstringName{get;set;}
publicstringName{get;set;}="summit";publicintAge{get;set;}=22;publicDateTimeBirthDay{get;set;}=DateTime.Now.AddYears(-20);publicIList<int>AgeList{get;set;}=newList<int>{10,20,30,40,50};
2、导入静态类
Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");
Console.WriteLine($"之前的使用方式: {Math.Pow(4,2)}");
Console.WriteLine($"导入后可直接使用方法: {Pow(4,2)}");
3、字符串嵌入值
Console.WriteLine(string.Format("当前时间:{0}",DateTime.Now.ToString()));
Console.WriteLine(string.Format("当前时间:{0}",DateTime.Now.ToString()));Console.WriteLine($"年龄:{this.Age} 生日:{this.BirthDay.ToString("yyyy-MM-dd")}");Console.WriteLine($"年龄:{{{this.Age}}} 生日:{{{this.BirthDay.ToString("yyyy-MM-dd")}}}");Console.WriteLine($"{(this.Age <= 22 ? "小鲜肉" : "老鲜肉")}");
4、空值运算符
stringname=null;Console.WriteLine(name.ToString());
int?iValue=10;Console.WriteLine(iValue?.ToString());//不需要判断是否为空stringname=null;Console.WriteLine(name?.ToString());// 程序不会报错,也不会输出任何值Console.WriteLine("空值运算符");
5、对象初始化器
IDictionary<int,string>dictOld=newDictionary<int,string>(){{1,"first"},{2,"second"}};// 循环输出foreach(KeyValuePair<int,string>keyValueindictOld){Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");}
IDictionary
6、异常过滤器
try{Int32.Parse("we");}catch(Exceptionex){Console.WriteLine(ex);}
intexceptionValue=10;try{Int32.Parse("s");}catch(Exceptione)when(exceptionValue>1)//满足条件才进入catch{Console.WriteLine("catch");}
7、nameof表达式
1 Console.WriteLine(nameof(peopleTest)); //获取peopleTest这个字符串
2 Console.WriteLine(nameof(People));
3 Console.WriteLine(nameof(CSharpSix));
8、在属性/方法里面使用Lambda表达式
publicstringNameFormat=>string.Format("姓名: {0}","summit");publicvoidPrint()=>Console.WriteLine(Name);
CSharpSix six = new CSharpSix(); 2 Console.WriteLine(six.NameFormat); 3 six.Print();
相关推荐:
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容