网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

C# 版本 6 新增特性

时间:2025-02-05 17:42

人气:

作者:admin

标签:

导读:C# 6.0 版 发布时间:2015 年 7 月 版本 6.0 随 Visual Studio 2015 一起发布,发布了很多使得 C# 编程更有效率的小功能。 以下介绍了部分功能: 静态导入 异常筛选器 自动属性初始化表达式 E...

C# 6.0 版

发布时间:2015 年 7 月

版本 6.0 随 Visual Studio 2015 一起发布,发布了很多使得 C# 编程更有效率的小功能。 以下介绍了部分功能:

其他新功能包括:

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

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

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


参考文章:
C#6.0 新增功能 - 张传宁 - 博客园
C#6.0新特性学习_c# 6.0-CSDN博客


静态导入 using static

using static System.Console; 
using static System.Math; // 可以直接使用该类下的静态成员

异常筛选器 when 关键字

catch (ExceptionType [e]) when (expr)

// ???? when 指定一个条件表达式,为true时才会捕捉该异常
catch (HttpRequestException e) when (e.Message.Contains("301")) 
{ return "Site Moved"; }  
catch (Exception e) when (e is ArgumentException || e is DivideByZeroException) 
{ Console.WriteLine($"Processing failed: {e.Message}"); }

自动属性

public string FirstName { get; set; } = string.Empty;  // 声明属性的时候为属性设定初始值

表达式成员 member => expression;

// 该方法成员使用了lambda表达式
// 该条规则对属性和方法都适用
public override string ToString() => $"{fname} {lname}".Trim();

Null 传播器 ?. 和 ?[]

如果 a 的计算结果为 null,则 a?.x 或 a?[x] 的结果为 null
如果 a 的计算结果为非 null,则 a?.x 或 a?[x] 的结果将分别与 a.x 或 a[x] 的结果相同。

a?.x // 成员访问
a?[x] // 元素访问
first = person?.FirstName ?? "Unspecified"; // 与 “null合并” 运算符一起使用
// ???? 他们都会执行短路返回

字符串内插 $

Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");

nameof 运算符

nameof 表达式可生成变量、类型或成员的名称作为字符串常量。

Console.WriteLine(nameof(System.Collections.Generic)); // output: Generic 
Console.WriteLine(nameof(List<int>)); // output: List 
Console.WriteLine(nameof(List<int>.Count)); // output: Count 
Console.WriteLine(nameof(List<int>.Add)); // output: Add 

List<int> numbers = new List<int>() { 1, 2, 3 }; 
Console.WriteLine(nameof(numbers)); // output: numbers 
Console.WriteLine(nameof(numbers.Count)); // output: Count 
Console.WriteLine(nameof(numbers.Add)); // output: Add

索引初始化表达式

private Dictionary<int, string> webErrors = new Dictionary<int, string>
{
    [404] = "Page not Found", // 通过索引直接指定值
    [302] = "Page moved, but left a forwarding address.",
    [500] = "The web server can't come out to play today."
};

Catch/Finally 块中的 Await

try     
{
	var responseText = await streamTask;
	return responseText;
} catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("301"))
{
	await logError("Recovered from redirect", e);  // ????
	return "Site Moved";
}
finally
{
	await logMethodExit();  // ????
	client.Dispose();
}

仅限 getter 属性的默认值

public string LastName {get;} = "Hello"; // 只读的属性也可以有初始化语句,并且,只读的属性可在构造器中进行赋值
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信