.NET 5 支持 C# 9.0
记录类型
public record Person
{
public string LastName { get; }
public string FirstName { get; }
public Person(string first, string last) => (FirstName, LastName) = (first, last);
}
public sealed record Student : Person
{
public int Level { get; }
public Student(string first, string last, int level) : base(first, last) => Level = level;
}
记录支持 with
表达式。 with
表达式指示编译器创建记录的副本,但修改指定的属性:
Person brother = person with { FirstName = "Paul" };
仅限 Init 的资源库
public struct WeatherObservation
{
public DateTime RecordedAt { get; init; }
public decimal TemperatureInCelsius { get; init; }
public decimal PressureInMillibars { get; init; }
public override string ToString() =>
$"At {RecordedAt:h:mm tt} on {RecordedAt:M/d/yyyy}: " +
$"Temp = {TemperatureInCelsius}, with {PressureInMillibars} pressure";
}
//调用方可使用属性初始化表达式语法来设置值,同时仍保留不变性:
var now = new WeatherObservation
{
RecordedAt = DateTime.Now,
TemperatureInCelsius = 20,
PressureInMillibars = 998.0m
};
顶级语句
应用程序中只有一个文件可使用顶级语句。Azure Functions 是顶级语句的理想用例。
模式匹配增强功能
- 类型模式要求在变量是一种类型时匹配
- 带圆括号的模式强制或强调模式组合的优先级
- 联合
and
模式要求两个模式都匹配 - 析取
or
模式要求任一模式匹配 - 求反
not
模式要求模式不匹配 - 关系模式要求输入小于、大于、小于等于或大于等于给定常数。
调整和完成功能
private List<WeatherObservation> _observations = new();
var forecast = station.ForecastFor(DateTime.Now.AddDays(2), new());
WeatherStation station = new() { Location = "Seattle, WA" };
从 C# 9.0 开始,可将 static
修饰符添加到 Lambda 表达式或匿名方法