淡若轻风

博客园 首页 新随笔 联系 订阅 管理

C# 10.0 随着 .NET 6 的发布而推出,为开发者带来了一系列语言层面的改进和增强,旨在减少样板代码、提升代码可读性和开发效率。

下面是 C# 10.0 的主要新增特性及示例:

 

1️⃣ 全局 using 指令(Global Using Directives)

  • 作用:在项目中可以一次性声明常用的 using 指令,而不必在每个文件中重复书写,减少样板代码。

  • 示例:

    // GlobalUsings.cs
    global using System;
    global using System.Collections.Generic;
    global using System.Linq;

    在项目中的其他文件中,就无需重复写入这些 using 指令。

 

2️⃣ 文件范围的命名空间声明(File-Scoped Namespace Declaration)

  • 作用:使用文件范围的命名空间声明可以减少嵌套层级,使文件结构更简洁。

  • 示例:

    // 传统写法
    namespace MyApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello, C# 10!");
            }
        }
    }
    
    // 文件范围命名空间写法(推荐)
    namespace MyApp;
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, C# 10!");
        }
    }

     

3️⃣ 记录结构(Record Structs)

  • 作用:在 C# 10 中,除了记录类(reference record)外,还可以定义记录结构(value type record),这对于需要不可变值类型数据传输对象非常有用。

  • 示例:

    public readonly record struct Point(int X, int Y);
    
    // 使用记录结构
    var p1 = new Point(3, 4);
    var p2 = p1 with { X = 10 }; // 使用 with 表达式创建修改副本
    Console.WriteLine(p1);  // 输出:Point { X = 3, Y = 4 }
    Console.WriteLine(p2);  // 输出:Point { X = 10, Y = 4 }

     

4️⃣ 常量插值字符串(Constant Interpolated Strings)

  • 作用:C# 10 允许如果所有插值部分都是编译时常量,则整个插值字符串也可以被声明为常量。

  • 示例:

    const string name = "World";
    const string greeting = $"Hello, {name}!";
    Console.WriteLine(greeting);  // 输出:Hello, World!

    这在需要编译时常量的场景(例如特性参数)中非常有用。

 

5️⃣ 改进的 Lambda 表达式

  • 作用:C# 10 对 Lambda 表达式进行了进一步改进,支持在 Lambda 表达式中添加属性,以及更好地推断返回类型,使得 Lambda 的书写更加灵活。

  • 示例(带属性的 Lambda):

    using System;
    
    // 示例:为 Lambda 表达式添加属性
    [Obsolete("Use a different lambda approach", true)]
    Func<int, int> square = x => x * x;
    
    Console.WriteLine(square(5)); // 如果启用了警告则会提示过时信息

    注意:属性应用到 Lambda 的场景较少见,更多改进在于类型推断和语法简化。

 

6️⃣ 扩展属性模式(Extended Property Patterns)

  • 作用:在模式匹配中,扩展了对对象属性的匹配能力,使得对嵌套属性的检查更加简洁直观。

  • 示例:

    public class Person
    {
        public string Name { get; set; }
        public Address Address { get; set; }
    }
    
    public class Address
    {
        public string City { get; set; }
    }
    
    // 使用扩展属性模式进行模式匹配
    string GetCityGreeting(object obj) =>
        obj is Person { Address.City: var city } ? $"Hello from {city}!" : "Unknown location";
    
    var person = new Person { Name = "Alice", Address = new Address { City = "Seattle" } };
    Console.WriteLine(GetCityGreeting(person));  // 输出:Hello from Seattle!

     

总结

C# 10.0 的新特性主要聚焦于:

  • 减少样板代码:通过全局 using 指令和文件范围的命名空间声明,减少重复代码,提高项目整体可读性。
  • 增强数据建模能力:记录结构(Record Structs)和常量插值字符串让不可变数据模式更灵活。
  • 改进语言表达力:对 Lambda 表达式和模式匹配的进一步增强,使得开发者能写出更简洁、直观的代码。

这些新特性共同提升了 C# 的开发体验,使得语言更加现代化。

如果你在整理 C# 的版本演进,C# 10.0 代表了在语法简洁性和项目结构组织方面的一次重要革新。

 

posted on 2025-02-06 22:36  淡若轻风  阅读(102)  评论(0)    收藏  举报