📜  11 - C# (1)

📅  最后修改于: 2023-12-03 15:29:09.219000             🧑  作者: Mango

C# 11 - 让 C# 更加现代化

C# 是一门广泛使用的面向对象程序设计语言,由微软公司开发并维护。它是托管代码的一部分,与 .NET Framework、.NET Core 和 Xamarin 等一起使用。

C# 11 是 C# 语言的一个新版本,使 C# 语言更加现代化和易于使用。C# 11 引入了许多新特性,其中一些特别有趣。

本文将介绍 C# 11 中的新特性,包括:

  • 模式匹配的改进
  • 扩展局部函数
  • 关键字 record
  • 元素 null 检查
  • Lambda 表达式中的没有值。
模式匹配的改进

C# 11 改进了模式匹配功能。这意味着可以使用更多的模式来匹配表达式,包括以下几种:

  • 模式的 or 运算符
  • 模式的 and 运算符
  • 模式的 not 运算符
  • with 绑定

以下是一个简单的示例:

if (obj is { Length: > 10 } arr or IList<int> list)
{
    ...
}

这里使用了 or 运算符和 Length 属性,以及类型别名和 with 绑定。

扩展局部函数

C# 11 还引入了扩展局部函数。这意味着可以将局部函数标记为 static,从而允许它们在当前文件以外的其他文件中使用。

partial class Person
{
    static partial void Display()
    {
        Console.WriteLine("Hello, World!");
    }
}

在另一个文件中可以像这样调用该方法:

partial class Person
{
    static partial void Display();
}

class Test
{
    static void Main()
    {
        Person.Display();
    }
}
关键字 record

C# 11 引入了一个新的关键字 record,用于创建类的记录类型。该记录类型具有以下特性:

  • 自动属性
  • 包含构造函数
  • HashCode 和 Equals 方法
  • With 和 Deconstruct 方法

以下是一个简单的示例:

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }

    public Person(string first, string last) => (FirstName, LastName) = (first, last);
}

可以像这样使用该类型:

Person person = new("John", "Doe");
元素 null 检查

C# 11 中的一个新功能是元素 null 检查。它允许您在使用“点”运算符之前检查对象是否为 null。

以下是一个简单的示例:

int?[] numbers = { null, 1, 2, null, 4 };
for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i]?.ToString() is string s)
    {
        ...
    }
}

这里,我们检查 numbers[i] 是否为 null,然后将其转换为字符串,如果成功,则使用该字符串执行一些操作。

Lambda 表达式中的没有值

C# 11 引入了一种新的语法,允许在 Lambda 表达式中使用类型推理。

以下是一个简单的示例:

List<int> numbers = new() { 1, 2, 3 };
List<int> evens = numbers.Select(x =>
{
    if (x % 2 == 0)
    {
        return x;
    }
}).ToList();

在这里,我们在 Lambda 表达式中使用了一个 if 语句,但该 if 语句没有值。C# 11 允许我们这样做,因为它可以自动推断类型。

总之,C# 11 是一次非常成功的更新,它使 C# 更加现代,更加易于使用。注意这些新特性,因为它们可能对您正在编写的代码产生影响。