源视频教程:https://www.bilibili.com/video/BV1tK4y1j7Eu
C#7~9版本新语法-官网:
C#7:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7
C#8:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-8
C#9:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9
1.1-自动属性初始化表达式
public class Student { public Student(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } public int? Id { get; set; } public string FirstName { get; } public string LastName { get; } //对只读属性只能通过构造函数对其初始化值 //public void SetName(string firstName, string lastName) //{ // FirstName = firstName; // LastName = lastName; //} //自动属性初始化表达式 public ICollection<double> Grades { get; } = new List<double>(); //public override string ToString() => $"{LastName}, {FirstName}"; //public override string ToString() //{ // return $"{FirstName}-{LastName}"; //} public override string ToString()=> $"{FirstName}-{LastName}"; public string FullName => $"{FirstName}-{LastName}"; //goes to public string FullName1 { get { return string.Format("{0}-{1}", this.FirstName, this.LastName); } } public string TestName { get; set; } } //1.只读自动属性 { Student student = new Student("Richard", "Richard01"); string fullName = student.ToString(); string fullName1 = student.FullName; }
1.2-using static
using System; using System.Collections.Generic; using System.Text; namespace SharpGrammarInfo.SharpSixInfoTest { public class StaticClass { public static void Next() { Console.WriteLine("Next"); } public static void NextTo() { Console.WriteLine("NextTo"); } public static void ExceptionShow() { try { throw new Exception("教育"); } catch (Exception ex) when (ex.Message.Contains("教育")) //把异常的消息过滤,符合我的条件我就处理 { throw; } } } } //引入命名空间 using static SharpGrammarInfo.SharpSixInfoTest.StaticClass; //调用 //2.using static { StaticClass.Next(); StaticClass.NextTo(); Next(); NextTo(); }
1.3-Null 条件运算符
//3.Null 条件运算符 { Student student = null; // student.FirstName; //如果student为null 未将对象引用至对象的实例 //if (student!=null) //{ // string fullName = student.FullName; //} string fullName = student?.FullName; //得到的结果一定是要支持null int? id = student?.Id; //? 只能为可空类型服务 student = new Student("AB", "CD"); fullName = student?.FullName; string testName = student?.TestName ?? "朝夕教育"; student.TestName = "Zhaoxi教育"; testName = student?.TestName ?? "朝夕教育"; }
1.4-字符串内插
//4.字符串内插 { //string.Format(); //stringBuilder //string+ string firstName = "朝夕"; string lastName = "教育"; //输出{}转义 var strs = $"{{{firstName}}}-{lastName}-{firstName}-{firstName};{firstName}"; }
1.5-异常刷选器
public static void ExceptionShow() { try { throw new Exception("朝夕教育"); } //把异常的消息过滤,符合我的条件我就处理 catch (Exception ex) when (ex.Message.Contains("朝夕教育")) { throw; } } //5.异常筛选器 { 之前都是自定义不同的Exception 继承Exception父类 StaticClass.ExceptionShow(); }
1.6-nameof表达式
//6.nameof 表达式 { string clasName= "StaticClass"; string className1 = nameof(StaticClass); Console.WriteLine(className1); string className2 = nameof(SharpSixInfo); Console.WriteLine(className2); string className3 = nameof(Student); Console.WriteLine(className3); //输出类名字符串 }
1.7-事件(发布订阅模式)
using System.ComponentModel; namespace SharpGrammarInfo.SharpSix { public class NotifyPropertyChanged : INotifyPropertyChanged { public string LastName { get { return lastName; } set { if (value != lastName) { lastName = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LastName))); } } } private string lastName; public event PropertyChangedEventHandler PropertyChanged; } } //7.事件(发布订阅模式) { ///什么是事件? NotifyPropertyChanged notifyPropertyChanged = new NotifyPropertyChanged(); notifyPropertyChanged.PropertyChanged += (object o, PropertyChangedEventArgs b) => { }; notifyPropertyChanged.LastName = "朝夕教育"; }
1.8-使用索引器初始化关联集合
//8.使用索引器初始化关联集合 { Dictionary<int, string> messages = 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."} }; messages.Add(405,"朝夕教育"); messages.Remove(405, out string obj); Console.WriteLine(obj); 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." }; webErrors.Add(405, "朝夕教育"); webErrors.Remove(405, out string strResult); }