📅  最后修改于: 2023-12-03 15:29:09.219000             🧑  作者: Mango
C# 是一门广泛使用的面向对象程序设计语言,由微软公司开发并维护。它是托管代码的一部分,与 .NET Framework、.NET Core 和 Xamarin 等一起使用。
C# 11 是 C# 语言的一个新版本,使 C# 语言更加现代化和易于使用。C# 11 引入了许多新特性,其中一些特别有趣。
本文将介绍 C# 11 中的新特性,包括:
C# 11 改进了模式匹配功能。这意味着可以使用更多的模式来匹配表达式,包括以下几种:
以下是一个简单的示例:
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();
}
}
C# 11 引入了一个新的关键字 record,用于创建类的记录类型。该记录类型具有以下特性:
以下是一个简单的示例:
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");
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,然后将其转换为字符串,如果成功,则使用该字符串执行一些操作。
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# 更加现代,更加易于使用。注意这些新特性,因为它们可能对您正在编写的代码产生影响。