C# 14 Null Conditional Assignment

C# 14 Null Conditional Assignment

Intro

C# 14 支持了 Null Conditional Assignment,针对如果不是 null 则对成员赋值的语句可以简化写法了,又可以少写一些代码啦

Sample

来看下使用示例,首先我们定义一个 Person 类型

[DebuggerDisplay("Age = {Age}, Name = {Name,nq}")]
file class Person(string name, int age)
{
    public string Name { get; set; } = name;
    public int Age { get; set; } = age;

    public event Action<Person> OnAgeChanged;

    public string[]? Tags { get; set; }

    public override string ToString() => $"{Name} is {Age} years old.";
}

之前的版本中的写法如下:

var p1 = new Person("Alice", 3);
if (p1 is not null)
{
    p1.Age = 10;
}

我们如果 p1 不是 null 则为其 Age 属性赋值为 10

在 C# 14 中我们可以简化为:

var p2 = new Person("Bob", 2);
p2?.Age = 20;

除了属性之外,字段, event 也是类似的,例如:

p2?.OnAgeChanged += 
    p => Console.WriteLine(p.ToString());

对于索引器也是支持的,嵌套也可以,如下:

p2?.Tags?[1] = "test";

反编译结果如下:

反编译

More

ASP.NET Core 项目已经开始使用这一特性简化代码了,可以参考 PR:https://github.com/dotnet/aspnetcore/pull/61244/files

sample1

sample2

References

  • • https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/null-conditional-assignment

  • • https://github.com/dotnet/csharplang/issues/8677

  • • https://github.com/dotnet/csharplang/discussions/8676

  • • https://github.com/dotnet/aspnetcore/pull/61244/files

  • • https://github.com/WeihanLi/SamplesInPractice/blob/main/net10sample/CSharp14Samples/NullConditionalAssignmentSample.cs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值