.NET 10 新增功能概览

类库方面的改进 用字符串比较数字排序 在 .NET 10 中,System.String 类新增了 CompareAsNumbers 方法,用于按数字顺序比较字符串。这对于包含数字的字符串排序非常有用,例如文件名或版本号。 StringComparer numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering); Console.WriteLine(numericStringComparer.Equals("02", "2")); // Output: True foreach (string os in new[] { "Windows 8", "Windows 10", "Windows 11" }.Order(numericStringComparer)) { Console.WriteLine(os); } // Output: // Windows 8 // Windows 10 // Windows 11 HashSet<string> set = new HashSet<string>(numericStringComparer) { "007" }; Console.WriteLine(set.Contains("7")); // Output: True 对十六进制字符串转换的 UTF-8 支持 .NET 10 在 Convert 类中增加了对十六进制字符串转换操作的 UTF-8 支持。 这些新方法提供了在 UTF-8 字节序列和十六进制表示形式之间转换的有效方法,而无需中间字符串分配: Convert.FromHexString(ReadOnlySpan<Byte>) Convert.FromHexString(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32) Convert.TryToHexString(ReadOnlySpan<Byte>, Span<Byte>, Int32) Convert.TryToHexStringLower(ReadOnlySpan<Byte>, Span<Byte>, Int32) Convert.TryToHexStringUpper(ReadOnlySpan<Byte>, Span<Byte>, Int32) 禁止重复 JSON 属性的选项 JSON 规范不指定在反序列化 JSON 有效负载时如何处理重复属性。 这可能会导致意外的结果和安全漏洞。NET 10 引入了 JsonSerializerOptions.AllowDuplicateProperties 禁止重复 JSON 属性的选项。 ...

2026年3月10日

C# 12 中的新增功能

主构造函数 C# 12 中的一个新功能是主构造函数。主构造函数是一个类的构造函数,它在类的声明中声明,而不是在类的主体中声明。主构造函数的参数可以用于初始化类的属性。 记录类型 public record Address(string FirstName, string LastName); 类类型 public class Person(string firstName, string lastName) { public override string ToString() { return $"{firstName},{lastName}"; } } public Person(string firstName) : this(firstName, "hello") { } 集合表达式 C# 12 中的另一个新功能是集合表达式。集合表达式是一种新的语法,用于初始化集合。集合表达式使用大括号,其中包含一个或多个元素初始化器。每个元素初始化器都是一个表达式,它可以是一个值,也可以是一个键值对。 // Create an array: int[] a = [1, 2, 3, 4, 5, 6, 7, 8]; // Create a list: List<string> b = ["one", "two", "three"]; // Create a span Span<char> c = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i']; // Create a jagged 2D array: int[][] twoD = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; // Create a jagged 2D array from variables: int[] row0 = [1, 2, 3]; int[] row1 = [4, 5, 6]; int[] row2 = [7, 8, 9]; int[][] twoDFromVariables = [row0, row1, row2]; 数组索引范围 数组的 0 索引与 sequence[0] 相同。 ^0 索引与 sequence[sequence.Length] 相同。 表达式 sequence[^0] 会引发异常,就像 sequence[sequence.Length] 一样。 对于任何数字 n,索引 ^n 与 sequence.Length - n 相同。 ...

2026年3月10日