博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背水一战 Windows 10 (1) - C# 6.0 新特性
阅读量:1546 次
发布时间:2019-04-21

本文共 7287 字,大约阅读时间需要 24 分钟。

原文:

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

作者:
介绍
背水一战 Windows 10 之 C# 6.0 新特性

  • 介绍 C# 6.0 的新特性

示例
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
{ [7] = "seven", [9] = "nine", [13] = "thirteen" }; lblMsg.Text += dict[13].ToString(); lblMsg.Text += Environment.NewLine; } // null 值判断 private void sample2() { List
list = null; int? count = list?.Count; // 因为 list 是 null,所以 list?.Count 是 null int? value3 = list?[3]; // 因为 list 是 null,所以 list?[3] 是 null list = new List
{ 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 表达式作用于字段 }}

OK

转载地址:http://ccjcy.baihongyu.com/

你可能感兴趣的文章
【英语学习】【Level 08】U02 Movie Time L4 From the page to the big screen
查看>>
【英语学习】【Level 08】U02 Movie Time L5 Art in motion
查看>>
【英语学习】【Level 08】U02 Movie Time L6 Blockbuster
查看>>
【英语学习】【Level 08】U03 My Choice L1 Good books are like good friends
查看>>
【英语学习】【Level 08】U03 My Choice L2 All-time favorite character
查看>>
【英语学习】【Level 08】U04 What I love L2 My favorite sport
查看>>
【Level 08】U07 Mixed Feelings L2 Let's go shopping
查看>>
【Level 08】U07 Mixed Feelings L3 I just want to have fun
查看>>
【Level 08】U07 Mixed Feelings L4 Learning by heart
查看>>
【Level 08】U07 Mixed Feelings L5 Front page news
查看>>
【英语学习】【化学】几个与氮(Nitrogen)有关的化学词汇 (1)
查看>>
Intel 64/x86_64/IA-32/x86处理器通用寄存器 (2) - 64位通用寄存器
查看>>
【英语学习】 - 君若不离不弃,吾当生死相依
查看>>
【英语学习】星期的词源
查看>>
【人生杂谈】 - 金钱/名利 & 贫穷/富贵 && 健身房定律
查看>>
【人生杂谈】宇宙/暗物质/擎天柱
查看>>
【人生杂谈】生命DNA/理性思维/天才&神经病
查看>>
Intel 64/x86_64/IA-32/x86处理器段寄存器 - 32位段寄存器/64位段寄存器
查看>>
Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
查看>>
Intel 64/x86_64/IA-32/x86处理器 - 通用指令(2) - 二进制算术指令/十进制算术指令
查看>>