温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C# 10的特性有哪些

发布时间:2021-12-31 11:27:33 来源:亿速云 阅读:149 作者:小新 栏目:开发技术

小编给大家分享一下C# 10的特性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

常量的内插字符串

C# 10 允许使用在常量字符串初始化中使用插值, 如下

const string name = "Oleg"; const string greeting = $"Hello, {name}."; Console.WriteLine(greeting); // Output: Hello, Oleg.

扩展属性模式

从 C# 10 开始,您可以在适当的模式中引用嵌套的属性或字段, 属性模式变得更具可读性并且需要更少的大括号。

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}, {b}"); // 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 支持本地函数的 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

以上是“C# 10的特性有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI