C#10的13個特性
常量的內(nèi)插字符串
C# 10 允許使用在常量字符串初始化中使用插值, 如下
const string name = "Oleg"; const string greeting = $"Hello, {name}."; Console.WriteLine(greeting); // Output: Hello, Oleg.
擴展屬性模式
從 C# 10 開始,您可以在適當?shù)哪J街幸们短椎膶傩曰蜃侄危?屬性模式變得更具可讀性并且需要更少的大括號。
Person person = new() { Name = "Oleg", Location = new() { Country = "PL" } }; if (person is { Name: "Oleg", Location.Country: "PL" }) { Console.WriteLine("It's me!"); } class Person { public string Name { get; set; } public Location Location { get; set; } } class Location { public string Country { get; set; } }
如果Location為null,則不會匹配模式并返回false。
文件范圍的命名空間
C# 10 引入了一種新的命名空間聲明方式 - 文件范圍的命名空間,減少一個大括號,代碼結構更簡潔。
namespace FileScopedNamespace; class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } }
全局 Using
一次引用,全局通用
global using System; global using System.Collections.Generic; global using System.Linq; global using System.Threading.Tasks; List<int> list = new() { 1, 2, 3, 4 }; int sum = list.Sum(); Console.WriteLine(sum); await Task.Delay(1000);
同一個解構中的賦值和聲明
C# 10 可以在同一個解構中進行賦值和聲明。
var rgb = (255, 100, 30); // Initialization & assignment int r; (r, int g, int b) = rgb; Console.WriteLine($"RGB: {r}, {g}, "); // Output: RGB: 255, 100, 30
Record 類型重寫 ToString() 時支持密封
Product product = new() { Name = "Bread" }; Console.WriteLine(product.ToString()); // Output: Bread public record Product { public string Name { get; init; } public sealed override string ToString() { return Name; } }
Record Struct
C# 10 支持 record struct
Person me = new() { FirstName = "Oleg", LastName = "Kyrylchuk" }; Console.WriteLine(me); // Output: Person { FirstName = Oleg, LastName = Kyrylchuk } Person otherPerson = me with { FirstName = "John" }; Console.WriteLine(otherPerson); // Output: Person { FirstName = John, LastName = Kyrylchuk } Person anotherMe = new() { FirstName = "Oleg", LastName = "Kyrylchuk" }; C onsole.WriteLine(me == anotherMe); // Output: True record struct Person { public string FirstName { get; init; } public string LastName { get; init; } } record struct Product(string Name, decimal Price);
Struct 字段支持初始化
using System; Person person = new() { Name = "Oleg" }; Console.WriteLine(person.Id + " " + person.Name); // Output: 0cc6caac-d061-4f46-9301-c7cc2a012e47 Oleg struct Person { public Guid Id { get; init; } = Guid.NewGuid(); public string Name { get; set; } }
Lambda 表達式的 Attributes 支持
C# 9 支持本地函數(shù)的 Attributes, C# 10 添加了 Lambda 表達式的 Attributes 支持。
Action a = [MyAttribute] () => { }; Action<int> b =[return: MyAttribute] (x) => { }; Action<int> c =[MyAttribute] ([MyAttribute] x) => { }; class MyAttribute : Attribute { }
Lambda 中的顯式返回類型
Test<int>(); var l1 = string () => string.Empty; var l2 = int () => 0; var l3 = static void () => { }; void Test<T>() { var l4 = T () => default; }
應用于方法的 AsyncMethodBuilder 特性
從 C# 7 開始,您只能將AsyncMethodBuilder 特性應用于類型, 在 C# 10 中,您還可以將該特性應用于單個方法。
using System.Runtime.CompilerServices; class Example { [AsyncMethodBuilder(typeof(AsyncVoidMethodBuilder))] public void ExampleMethod() { } }
結構體中的表達式
C# 10 支持 將 with 表達式和 struct 一起使用
Product potato = new() { Name = "Potato", Category = "Vegetable" }; Console.WriteLine($"{potato.Name} {potato.Category}"); // Output: Potato Vegetable Product tomato = potato with { Name = "Tomato" }; Console.WriteLine($"{tomato.Name} {tomato.Category}"); // Output: Tomato Vegetable struct Product { public string Name { get; set; } public string Category { get; set; } }
匿名類型中的表達式
C# 10 支持 將 with 表達式和匿名類型一起使用
var potato = new { Name = "Potato", Category = "Vegetable" }; Console.WriteLine($"{potato.Name} {potato.Category}"); // Output: Potato Vegetable var onion = potato with { Name = "Onion" }; Console.WriteLine($"{onion.Name} {onion.Category}"); // Output: Onion Vegetable
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C#實現(xiàn)通過模板自動創(chuàng)建Word文檔的方法
這篇文章主要介紹了C#實現(xiàn)通過模板自動創(chuàng)建Word文檔的方法,詳細講述了C#生成Word文檔的實現(xiàn)方法,是非常實用的技巧,需要的朋友可以參考下2014-09-09C# menuStrip控件實現(xiàn)鼠標滑過自動彈出功能
MenuStrip 控件是 Visual Studio 和 .NET Framework 中的功能。使用該控件,可以輕松創(chuàng)建 Microsoft Office 中那樣的菜單。本文給大家分享menuStrip鼠標滑過自動彈出效果2021-07-07C# ManagementObjectSearcher操作window案例詳解
這篇文章主要介紹了C# ManagementObjectSearcher操作window案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Unity Shader實現(xiàn)玻璃材質(zhì)效果
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)玻璃材質(zhì)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04