C# 12 新增功能实操!
创作时间:
作者:
@小白创作中心
C# 12 新增功能实操!
引用
1
来源
1.
https://www.cnblogs.com/Can-daydayup/p/18321876
C# 12带来了多项令人兴奋的新特性,从主构造函数到集合表达式,再到内联数组和默认lambda参数,这些新功能不仅简化了代码编写,还提高了开发效率。本文将通过具体示例,带你深入了解这些新特性,帮助你快速掌握C# 12的核心功能。
主构造函数
主构造函数允许你直接在类定义中声明构造函数参数,并自动生成相应的属性。这种设计不仅简化了代码结构,还提高了代码的可读性和可维护性。
主构造函数参数的最常见用途包括:
- 作为 base() 构造函数调用的参数。
- 初始化成员字段或属性。
- 引用实例成员中的构造函数参数。
代码示例
将任何参数放在类型名称后面的括号中:
public class CSharp12GrammarExercise
{
public static void OutputPrint()
{
var person = new Person("追逐时光者", 30);
Console.WriteLine($"{person.Name}, {person.Age}");
}
}
public class Person(string name, int age)
{
public string Name => name;
public int Age => age;
}
以下代码初始化从主构造函数参数计算的两个只读属性:
public class CSharp12GrammarExercise
{
public static void OutputPrint()
{
// 创建 Distance 结构体实例
Distance distance = new Distance(10, 55);
// 访问 Magnitude 和 Direction 属性
Console.WriteLine($"Magnitude: {distance.Magnitude},Direction: {distance.Direction}");
}
}
public readonly struct Distance(double dx, double dy)
{
public readonly double Magnitude { get; } = Math.Sqrt(dx * dx + dy * dy);
public readonly double Direction { get; } = Math.Atan2(dy, dx);
}
集合表达式
集合表达式引入了一种新的简洁语法,用于创建常用集合值。可以使用展开运算符(..)将其他集合内联到这些值中。
下面的示例展示了集合表达式的用法:
public static void CollectionExpressions()
{
// 创建一个数组
int[] array = [55, 99, 100, 33];
// 创建一个列表
List<string> list = ["one", "two", "three", "five", "追逐时光者"];
// 创建一个 Span
Span<char> span = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'k'];
// 创建一个交错二维数组
int[][] two2D = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [88, 8, 9]];
}
展开运算符(..)示例代码:
展开运算符(集合表达式中的 ..)可将其参数替换为该集合中的元素。 参数必须是集合类型。 以下示例演示了展开运算符的工作原理:
int[] item0 = [88, 2, 3];
int[] item1 = [22, 5, 6];
int[] item2 = [7, 99, 9];
int[] totalList = [.. item0, .. item1, .. item2];
foreach (var element in totalList)
{
Console.Write($"{element}, ");
}
没有 ..
会有异常:
正常输出:
内联数组
内联数组用于提高应用程序性能,允许在结构体中创建固定大小的数组。虽然你可能不会自己声明内联数组,但当它们通过 System.Span<T>
或 System.ReadOnlySpan<T>
从运行时 API 暴露出来时,你可以透明地使用它们。内联数组提供与不安全固定大小缓冲区类似的性能特性。
内联数组的声明与下面的结构类似:
[System.Runtime.CompilerServices.InlineArray(20)]
public struct Buffer
{
private int _element0;
}
你可以像使用其他数组一样使用它们:
public static void InlineArrays()
{
var buffer = new Buffer();
for (int i = 0; i < 20; i++)
{
buffer[i] = i;
}
foreach (var i in buffer)
{
Console.WriteLine(i);
}
}
默认 lambda 参数
现在可以为 Lambda 表达式的参数定义默认值,语法和规则与将参数的默认值添加到任何方法或本地函数相同。
如果 lambda 表达式只有一个输入参数,则括号是可选的:
Func<double, double> testcube = x => x * x * x;
两个或更多输入参数使用逗号加以分隔:
Func<int, int, bool> testForEquality = (x, y) => x == y;
可以显式指定类型,如下面的示例所示:
注意:输入参数类型必须全部为显式或全部为隐式;否则,便会生成 CS0748 编译器错误!!
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;
任何类型的别名
可以使用 using
别名指令创建任何类型的别名,而不仅仅是命名类型。也就是说,你可以为元组类型、数组类型、指针类型或其他不安全类型创建语义别名。
使用 using
关键字为元组类型创建别名,并进行调用:
using PointTest = (int item1, int item2);
namespace HelloDotNetGuide.CSharp语法
{
public class CSharp12GrammarExercise
{
public static void OutputPrint()
{
//使用 using 关键字为元组类型创建别名,并进行调用:
PointTest point = (10, 20);
Console.WriteLine($"输出:Item1={point.Item1}, Item2={point.Item2}");
}
}
}
参考文章
- 详细功能介绍请阅读微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-12
- 文章示例源码地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/DotNetGuidePractice/HelloDotNetGuide/CSharp%E8%AF%AD%E6%B3%95/CSharp12GrammarExercise.cs
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
- 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。
欢迎加入DotNetGuide技术社区微信交流群👪
热门推荐
手腱鞘炎能自愈吗
【学习笔记】多元线性回归模型 —— Matlab
山西晋中榆次区第九中学:为学生成为最好的自己提供无限可能
衡量股市泡沫化的指标有哪些?
凤梨和菠萝的区别:7个关键特征帮你轻松辨别
安暖气片用什么管子比较好
这些交通信号灯知识,司机必看!
黑眼圈怎么消除?一篇解密黑眼圈原因与改善方法!
抑郁症晚上睡眠障碍用药指南
怀孕对宝宝影响有哪些方面
什么是被动投资?被动投资的风险如何控制?
法相伴·更有福|遗产继承引纠纷 倾心调解护亲情
CRTP与设计模式的结合应用:提升C++代码的灵活性与可维护性
探索精致家饰的魅力:越来越多的人为何着迷于家居装饰
鱼竿什么调性最好?一文详解鱼竿调性选择攻略
脚型三维扫描仪:智能量脚的新选择
成都世纪城新国际会展中心:西部地区规模最大、设施最先进的多功能会议会展中心
网文行业现状分析
香蕉皮的功效与作用及营养价值
韩愈《早春呈水部张十八员外》的古诗翻译与赏析
企业如何做好员工关怀:十大策略与实践指南
枣树的种植方法和技术
魔芋焯水多长时间能熟 魔芋焯水后要过冷水吗
如何选择适合别墅家庭装饰的风格和色彩搭配?
什么是孳息物:法律视角下的解析与探讨
套装选购指南:如何平衡品质与价格
中药汤剂的正确服用温度和时间:温服、热服还是冷服?
初中英语中的主语、谓语、宾语、定语、状语、补语和表语知识总结
江油人口证办理流程及所需材料详解
三屏联动智控体系:景区票务的实时动态调控解决方案