文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C# 10的特性有哪些

2023-06-22 07:11

关注

小编给大家分享一下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 & assignmentint 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: Breadpublic 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: Truerecord 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 Olegstruct 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 VegetableProduct tomato = potato with { Name = "Tomato" };Console.WriteLine($"{tomato.Name} {tomato.Category}");// Output: Tomato Vegetablestruct 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 Vegetablevar onion = potato with { Name = "Onion" };Console.WriteLine($"{onion.Name} {onion.Category}");// Output: Onion Vegetable

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯