广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#10的13个特性
  • 650
分享到

C#10的13个特性

2024-04-02 19:04:59 650人浏览 安东尼
摘要

常量的内插字符串 C# 10 允许使用在常量字符串初始化中使用插值, 如下 const string name = "Oleg"; const string greeting

常量的内插字符串

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#10的13个特性

本文链接: https://www.lsjlt.com/news/161326.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#10的13个特性
    常量的内插字符串 C# 10 允许使用在常量字符串初始化中使用插值, 如下 const string name = "Oleg"; const string greeting ...
    99+
    2022-11-12
  • C# 10的特性有哪些
    小编给大家分享一下C# 10的特性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常量的内插字符串C# 10 允许使用在常量字符串初始化中使用插值, 如下co...
    99+
    2023-06-22
  • 13 个 python3 才能用的特性
    分享来源13 个 python3 才能用的特性 python3 于 2008 年发布,从最初的大割裂到现在,绝大多数的开源库已经使用 python3 来编写,并且已经迭代了五个大版本,最新的 python3.7 计划于 2018 年 6 ...
    99+
    2023-01-31
    能用 特性
  • C#10新特性有哪些
    本篇内容主要讲解“C#10新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#10新特性有哪些”吧!1、Natural types for lambdasC# 10 可以更好做类型推断...
    99+
    2023-06-25
  • python的13个特性分别是什么
    python的13个特性分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。如果你是一个正在学习python的c、c++或者java程序员,或者你是刚开始学python...
    99+
    2023-06-02
  • 关于C#10 新特性 Lambda 优化
    目录1、Natural types for lambdas2、Lambda Ref/Out/In Parameter Modifier3、Lambda Return Type4、Na...
    99+
    2022-11-12
  • 企业红帽Linux7的10个特性分别是怎样的
    本篇文章给大家分享的是有关企业红帽Linux7的10个特性分别是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  红帽正式发布了企业版Linux 7,满足企业当前对数据中...
    99+
    2023-06-13
  • C#9.0推出的4个新特性介绍
    在 .NET 5.0 的发布中,不仅统一了框架,微软还在C#9.0中推出了一些新特性。 本版本中,印象深刻的功能: Init-only setters (初始化设置器)Records...
    99+
    2022-11-13
  • JDK 10版本的新特性有哪些
    本篇内容介绍了“JDK 10版本的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!特性总览以下是 Java 10 中的引入的部分新...
    99+
    2023-06-16
  • nodejs的10个性能优化技巧
    下面是我们使用Node.js时遵循的10个性能规则: 1. 避免使用同步代码 在设计上,Node.js是单线程的。为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作。...
    99+
    2022-06-04
    性能 技巧 nodejs
  • c#的特性有哪些
    本篇文章给大家分享的是有关c#的特性有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. ObsoleteAttributeObsoleteAttribute 适用于除组件...
    99+
    2023-06-15
  • 浅谈c#开发者应该了解的15个特性
    目录1. ObsoleteAttribute2. 使用 DefaultValueAttribute 为 C# 自动实现的属性设置默认值3. DebuggerBrowsableAttr...
    99+
    2022-11-12
  • C++语言的15个晦涩特性分别是什么
    本篇文章为大家展示了C++语言的15个晦涩特性分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。这个列表收集了 C++ 语言的一些晦涩(Obscure)特性,是我经年累月研究这门语言...
    99+
    2023-06-17
  • 10个提升MySQL性能的小技巧
    从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫。 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困...
    99+
    2022-05-23
    MySQL 数据库 MySQL
  • 怎么在C#中创建一个自定义特性
    这期内容当中小编将会给大家带来有关怎么在C#中创建一个自定义特性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现方式声明自定义特性,一个新的自定义特性应派生自 System.Attribute 类。//...
    99+
    2023-06-14
  • 使用C#中的Flags特性
    举个例子:我有如下的一个需求,当我想要取得用户信息的时候,会先从本地缓存中查找,找不到然后从分布式缓存中查找,最后找不到再从数据库中查询。但是有些场景我又不需要查询数据库。 所以我想...
    99+
    2022-11-13
  • C#中Attribute特性的用法
    开篇语 本文开始之前,首先我想问下大家对于属性和特性知道多少?属性和特性又有何区别? 对于该单词,我更想把它称之为:特性。对于属性和特性就是名称上有纠葛(不知道你们迷不迷,反正我写...
    99+
    2022-11-13
  • C++的test特性有哪些
    这篇文章主要介绍“C++的test特性有哪些”,在日常操作中,相信很多人在C++的test特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的test特性有哪些”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • 10个提升web应用程序10倍性能的技巧有哪些
    这篇文章将为大家详细讲解有关10个提升web应用程序10倍性能的技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。提高Web应用程序性能比以往任何时候都更加重要。在线经济活动的份额正在...
    99+
    2023-06-16
  • C++的新特性shared_ptr怎么用
    本篇内容主要讲解“C++的新特性shared_ptr怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的新特性shared_ptr怎么用”吧!代码示例首先是头文件:和之前介绍的例子相比,...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作