1、C# 6.0 示例 1: 自动属性支持初始化, 字符串嵌入的新方式, 通过 Using Static 引用静态类, nameof 表达式
CSharp6/Demo1.xaml.cs

/*
* C# 6 示例 1
* 自动属性支持初始化, 字符串嵌入的新方式, 通过 Using Static 引用静态类, nameof 表达式
*/ using System;
using System.ComponentModel;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using static System.Math; // 通过 Using Static 引用静态类 namespace Windows10.CSharp6
{
public sealed partial class Demo1 : Page
{
// 自动属性支持初始化了
public string MyName { get; set; } = "default value";
// 只读自动属性也可以初始化
public int MyAge { get; } = 17; public Demo1()
{
this.InitializeComponent(); this.Loaded += Demo1_Loaded;
} private void Demo1_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
sample3();
sample4();
} // 自动属性支持初始化(Initializers for auto-properties)
private void sample1()
{
lblMsg.Text = this.MyName;
lblMsg.Text += Environment.NewLine; lblMsg.Text += this.MyAge.ToString();
lblMsg.Text += Environment.NewLine;
} // 字符串嵌入(String Interpolation)的新方式
private void sample2()
{
// 之前的字符串嵌入方式
lblMsg.Text += string.Format("myName: {0}, myAge: {1}", this.MyName, this.MyAge);
lblMsg.Text += Environment.NewLine; // 新的字符串嵌入方式
lblMsg.Text += $"myName: {this.MyName}, myAge: {this.MyAge}, {{this.MyName}}";
lblMsg.Text += Environment.NewLine;
} // 通过 Using Static 引用静态类
private void sample3()
{
// 之前通过 using static System.Math; 引用了静态类 System.Math
// 那么之后就可以直接使用 System.Math 的方法了,如下
lblMsg.Text += Abs(-100).ToString();
lblMsg.Text += Environment.NewLine;
} // nameof 表达式
private void sample4()
{
DateTime dateTime = new DateTime();
// nameof 表达式 - 用于获取变量的名称,比如下面这个会输出 "dateTime",这个有什么用呢?参见之后的 "Book" 类的说明
lblMsg.Text += nameof(dateTime);
lblMsg.Text += Environment.NewLine;
}
// 演示 nameof 表达式的用途
public class Book : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; private string _title;
public string Title
{
get { return _title; }
set
{
_title = value; if (PropertyChanged != null)
{
// 这里以前只能这么写 PropertyChanged(this, new PropertyChangedEventArgs("Title"));
// 现在可以向下面这样写
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Title)));
// 有什么用呢?
// 如果我要修改属性 Title 的名字时,而又忘了修改对应的 PropertyChangedEventArgs 中的名字,则编译会报错,以便修改
// 当然修改属性名字时最好用 Visual Studio 提供的“重命名”的方法
}
}
}
}
}
}

2、C# 6.0 示例 2: 在 catch 和 finally 中支持 await, 异常过滤器
CSharp6/Demo2.xaml.cs

/*
* C# 6 示例 2
* 在 catch 和 finally 中支持 await, 异常过滤器
*/ using System;
using System.Threading.Tasks;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.CSharp6
{
public sealed partial class Demo2 : Page
{
public Demo2()
{
this.InitializeComponent(); this.Loaded += Demo2_Loaded;
} private void Demo2_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
} // 在 catch 和 finally 中也支持 await 了
private async void sample1()
{
try
{
throw new Exception("");
}
catch
{
await Task.Delay(1000);
}
finally
{
await Task.Delay(1000);
}
} // 异常过滤器 (Exception filters) 
private void sample2()
{
try
{
throw new Exception(new Random().Next(3).ToString());
}
catch (Exception ex) when (ex.Message.Equals("0")) // 通过 when 表达式过滤异常
{
lblMsg.Text += "0";
lblMsg.Text += Environment.NewLine;
}
catch (Exception ex) when (ex.Message.Equals("1")) // 通过 when 表达式过滤异常
{
lblMsg.Text += "1";
lblMsg.Text += Environment.NewLine;
}
catch (Exception ex) when (CheckExceptionMessage(ex, "2")) // 通过 when 表达式过滤异常(表达式中的判断条件也可以是一个方法调用)
{
lblMsg.Text += "2";
lblMsg.Text += Environment.NewLine;
}
}
private bool CheckExceptionMessage(Exception ex, string value)
{
if (ex.Message.Equals(value))
return true;
return false;
}
}
}

3、C# 6.0 示例 3: 带索引的对象初始化器, null 值判断, lambda 表达式作用于属性或方法
CSharp6/Demo3.xaml.cs

/*
* C# 6 示例 3
* 带索引的对象初始化器, null 值判断, lambda 表达式作用于属性或方法
*/ using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.CSharp6
{
public sealed partial class Demo3 : Page
{
public Demo3()
{
this.InitializeComponent(); this.Loaded += Demo3_Loaded;
} private void Demo3_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
sample3();
} // 带索引的对象初始化器
private void sample1()
{
// Dictionary 也可以这样初始化了
var dict = new Dictionary<int, string>
{
[7] = "seven",
[9] = "nine",
[13] = "thirteen"
}; lblMsg.Text += dict[13].ToString();
lblMsg.Text += Environment.NewLine;
} // null 值判断
private void sample2()
{
List<int> list = null;
int? count = list?.Count; // 因为 list 是 null,所以 list?.Count 是 null
int? value3 = list?[3]; // 因为 list 是 null,所以 list?[3] 是 null list = new List<int> { 1, 2, 3 };
count = list?.Count; // 这句会异常的,因为 list 不是 null 且 list 没有第 11 个元素
// int? value10 = list?[10]; lblMsg.Text += count.ToString();
lblMsg.Text += Environment.NewLine; // null 值判断的最主要的应用是这样的
// 之前的写法
object obj1 = null;
if (obj1 != null)
{
obj1.ToString();
}
// 现在的写法
object obj2 = null;
obj2?.ToString();
} // lambda 表达式作用于属性或方法
private void sample3()
{
lblMsg.Text += this.ToString();
lblMsg.Text += Environment.NewLine; lblMsg.Text += this.FullName;
lblMsg.Text += Environment.NewLine;
} public string FirstName { get; set; } = "lei";
public string LastName { get; set; } = "wanglei"; public override string ToString() => $"{FirstName} {LastName}"; // lambda 表达式作用于方法
public string FullName => $"{FirstName} {LastName}"; // lambda 表达式作用于属性
}
}

C# 6.0 新特性的更多相关文章

  1. 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?

    来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...

  2. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  3. Visual Studio 2015速递(1)——C#6.0新特性怎么用

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  4. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  5. 背水一战 Windows 10 (1) - C# 6.0 新特性

    [源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...

  6. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  7. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  8. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  9. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  10. C#发展历程以及C#6.0新特性

    一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...

随机推荐

  1. Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

    前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...

  2. 开启我的Android之旅-----记录Android环境搭建遇到的问题

    在现在这个离不开手机的时代,对于手机APP的开发也是一个很大的市场,所以自己也想去探一探手机APP开发,在我们进行Android开发的第一步就是搭建环境,具体怎么搭建我就不说,这里记录一下在搭建环境的 ...

  3. 125个工具与技术(PMBOK2008)

    名称 定义 适用场景 适用过程 专家判断 对某方面擅长的人就是专家,找专家协助就是专家判断,专家可能是顾问.干系人.PMO.团队成员 制定项目章程.制定项目管理计划.指导与管理项目执行.监控项目工作. ...

  4. [Java入门笔记] Java语言基础(一):注释、标识符与关键字

    注释 什么是注释? 注释是我们在编写代码时某段代码.某个方法.某个类的说明文字,方便大家对于代码的阅读.被注释的内容不会被编译.执行. Java的注释分为三种类型:单行注释.多行注释.文档注释. 单行 ...

  5. linux

    托瓦兹跟BBS上面一堆工秳师一样, 他发现Minix虽然真癿很棒,但是谭宁邦教授就是丌愿意迚行功能癿加强,导致一堆工秳师在操作系统功能上面癿欲求丌满! 这个时候年轻癿托瓦兹就想:『既然如此,那我何丌自 ...

  6. NAS硬盘损坏拷贝时的处理办法及 UBUNTU下遍历删除某目录的方法

    NAS突然挂了,说是硬盘坏了,我不信呀,换块上去先.原来的硬盘要经过一定的操作才能使用 官方给出的解决方案:我如何使用电脑来还原存储在 DiskStation 中的数据? 然后,你再拷贝到新的NAS中 ...

  7. js鼠标滚轮事件

    不多说,直接上代码. //非ie document.body.onmousewheel = function(event) { event = event || window.event; conso ...

  8. Centos6.5下设置静态IP

    1.编辑网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 设置网卡eth0的IPV4信息,需要注意的是,设置的IPADDR需要和局域网中其他机器处 ...

  9. BI报表系统在银行业的应用

    在当前大数据的背景下,银行业传统联机业务技术存在开发周期长.不够灵活.大量的业务数据难以充分利用.操作复杂.监控效率低等弊端,多数企业表示需要搭建一个符合银行特色的商业智能平台,把需要的数据和信息集中 ...

  10. 利用epoll写一个"迷你"的网络事件库

    epoll是linux下高性能的IO复用技术,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率.另一点原因就是获取 ...