CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

C#的这个语法是在哪一个版本出现的?-免费源码丞旭猿

这是C6.0才出现的新特性。

ar s = string.Fromat("{0}+{1}={2}",12,23,12+23)

用起来必须输入string.Fromat,使用{0}占位符,必须按照0,1,2,3,…循序来格式化,有时候会出现多个占位符,这一点比较容易出错。

$的用法相对轻松,不易出错。

var s = $"{12}+{23}={12+23}"

除了$用法,C6.0还发布了这些新特性和功能:

C 在 3.0 版和 5.0 版对面向对象的语言添加了主要的新功能。 版本 6.0 随 Visual Studio 2015 一起发布,通过该版本,它不再推出主导性的杀手锏,而是发布了很多使得 C 编程更有效率的小功能。 以下介绍了部分功能:

其他新功能包括:

  • 索引初始化表达式
  • Catch/Finally 块中的 Await
  • 仅限 getter 属性的默认值

这些功能每一个都很有趣。 但从整体来看,可以发现一个有趣的模式。 在此版本中,C 消除语言样本,让代码更简洁且更具可读性。 所以对喜欢简洁代码的用户来说,此语言版本非常成功。

除了发布此版本,他们还做了另一件事,虽然这件事本身与传统的语言功能无关。 他们发布了Roslyn 编译器即服务。 C 编译器现在是用 C 编写的,你可以使用编译器作为编程工作的一部分。

1.自动属性初始化

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

publicintId{get;set;}publicstringName{get;set;}

在C6.0中,属性可以自动赋初始值,例如:

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)}");

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

1、使用using导入静态类

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

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

3、字符串嵌入值

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

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

在C6.0中,可以直接使用$进行字符串的嵌入了,例如:

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、空值运算符

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

stringname=null;Console.WriteLine(name.ToString());

结果:

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

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

结果:

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

5、对象初始化器

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

IDictionary<int,string>dictOld=newDictionary<int,string>(){{1,"first"},{2,"second"}};// 循环输出foreach(KeyValuePair<int,string>keyValueindictOld){Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");}

结果:

在C6.0中,可以通过索引的方式给字段进行初始化,例如:

IDictionary dictNew = new Dictionary()
{
       [4] = "first",
       [5] = "second"
};
// 循环输出
foreach (KeyValuePair keyValue in dictNew)
{
        Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");
}

结果:

6、异常过滤器

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

try{Int32.Parse("we");}catch(Exceptionex){Console.WriteLine(ex);}

结果:

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

intexceptionValue=10;try{Int32.Parse("s");}catch(Exceptione)when(exceptionValue>1)//满足条件才进入catch{Console.WriteLine("catch");}

结果:

7、nameof表达式

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

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

结果:

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

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

publicstringNameFormat=>string.Format("姓名: {0}","summit");publicvoidPrint()=>Console.WriteLine(Name);

在Main()方法里面调用:

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

结果:

相关推荐:

Visual Studio 有什么奇技淫巧?

淘宝上一两元钱激活Windows是如何做到的?

新手如何学习WPF?

C.NET 该如何进阶?

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容