0

0

c# 12 新特性有哪些

幻夢星雲

幻夢星雲

发布时间:2026-01-14 19:45:02

|

832人浏览过

|

来源于php中文网

原创

C# 12 是围绕减少样板代码、提升集合操作表达力、强化性能控制三大目标设计的实用升级,包含主构造函数、集合表达式、默认lambda参数和InlineArray四大核心特性。

c# 12 新特性有哪些

C# 12 已于 2023 年 11 月正式发布,当前(2025 年底)已在 .NET 8+ 生产环境广泛落地。它不是“语法糖堆砌”,而是围绕减少样板代码、提升集合操作表达力、强化性能控制三个核心目标设计的实用升级。

主构造函数:类/结构体声明即初始化

你不再需要写 private readonly string _name; + 显式构造函数 + 属性赋值三行代码。主构造函数把参数直接“注入”到类型作用域中:

public class Person(string name, int age)
{
    public string Name => name;  // name 可直接用,无需字段声明
    public int Age => age;
    public void Introduce() => Console.WriteLine($"I'm {Name}, {Age} years old.");
}
  • 适用于 classstructrecord,不限于记录类型
  • 参数自动成为私有只读捕获字段(编译器生成),不可在外部修改
  • ⚠️ 常见坑:不能在字段初始值设定项中直接引用主构造参数(如 private string _fullName = $"{name}"; 会报错),必须改用属性或构造函数体
  • record 深度协同:结合 record class Person(string name, int age); 可一行定义不可变数据容器 + 相等性 + ToString()

集合表达式:[] 统一初始化所有集合

告别 new int[] {1, 2, 3}new List {"a", "b"}Enumerable.Range(1, 5).ToList() 等不一致写法。C# 12 用统一 [] 语法覆盖数组、列表、、自定义集合(只要实现 IEnumerable 且有合适构造函数):

int[] arr = [1, 2, 3];
List list = ["hello", "world"];
var range = [.. Enumerable.Range(10, 3)]; // [10, 11, 12]
var combined = [.. arr, .. list.Select(s => s.Length), 999]; // 混合展开
  • .. 是展开操作符(spread),可展开任意 IEnumerable,不只是数组
  • 编译器按目标类型选择最优构造方式:目标是 int[] 就生成数组;目标是 List 就调用 List(IEnumerable) 构造函数
  • ⚠️ 常见坑:若目标类型无匹配构造函数或工厂方法(如某些第三方集合),会编译失败;此时需显式构造或加转换
  • 性能友好:比链式 .ToList().AddRange() 更少中间分配

默认 lambda 参数:让匿名函数真正可复用

以前写带默认行为的 lambda,得靠 ?? 或条件判断;现在可像普通方法一样定义默认值:

魔众SCRM私域运营平台5.8.0
魔众SCRM私域运营平台5.8.0

魔众SCRM私域运营平台是一个在线CRM管理平台,支持多企业多租户模式,具有高扩展性,支持一站式私域流量运营平台。魔众SCRM私域运营平台,一站式私域流量运营平台。2023年10月02日魔众SCRM私域运营系统发布v5.8.0版本,增加了以下30个特性:·[新功能] 移动端增加c-rich-html组件,支持多端富文本兼容显示·[新功能] MS.Util.browser 浏览器判断工具类·[新功能

下载
var log = (string msg, LogLevel level = LogLevel.Information) =>
    Console.WriteLine($"[{level}] {msg}");

log("Started"); // [Information] Started log("Failed", LogLevel.Error); // [Error] Failed

  • 默认值必须是编译时常量(1"default"typeof(T) 等),不能是运行时变量
  • 支持命名参数调用(如 log(msg: "x", level: LogLevel.Warning)
  • ⚠️ 常见坑:lambda 类型推导可能失败——若未显式标注委托类型(如 Action),编译器有时无法识别含默认参数的 lambda,建议在复杂场景显式声明委托变量
  • 特别适合事件回调、配置钩子、测试模拟等需要“可选定制”的场景

InlineArray:高性能固定大小缓冲区的终极方案

当你要在 struct 中存几个 float、int 或 byte(比如音频采样点、游戏顶点坐标),又不想触发 GC 或内存碎片?[InlineArray] 让你把数组“内联”进结构体布局:

[System.Runtime.CompilerServices.InlineArray(1024)]
public struct AudioBuffer
{
    private float _element0; // 编译器自动扩展为 1024 个 float 字段
}

// 使用时像普通数组 var buf = new AudioBuffer(); buf[0] = 0.1f; buf[1023] = -0.5f;

  • 完全栈分配(若 struct 在栈上),零 GC 压力,缓存友好
  • List 快 10 倍以上(实测),比 Span 更轻量(无长度/指针管理开销)
  • ⚠️ 常见坑:大小必须是编译期常量;不支持泛型参数化尺寸;仅限 struct;调试器显示可能不直观(显示为字段列表而非数组)
  • 典型场景:Unity DOTS 中的 Job 数据块、实时音频处理 buffer、高频小数据包序列化

C# 12 的真实价值不在“炫技”,而在于它把过去要靠经验、模板、甚至第三方库才能写得又快又稳的模式,变成了语言原生支持的几行代码。但要注意:这些特性依赖 .NET 8 SDK(或更高版本)和 C# 12 语言版本设置(项目文件中需有 12),旧项目迁移时容易漏掉这个配置,导致编译器静默降级到 C# 11 行为。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

558

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

98

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

537

2024.08.29

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号