gpt4 book ai didi

C# Null 条件运算符替代方案(条件赋值)?

转载 作者:太空狗 更新时间:2023-10-30 01:01:10 30 4
gpt4 key购买 nike

<分区>

C# null-conditional operator允许有用的短路:

double? range = (unit as RangedUnit)?.WeaponRange;

不幸的是,空条件运算符不能以相同的方式用于简写赋值,因为它返回一个值(不能用于左手赋值):

(unit as RangedUnit)?.PreferredTarget = UnitType.Melee;

导致可能的替代语法:

if (unit is RangedUnit)
{
(unit as RangedUnit).PreferredTarget = UnitType.Melee;
}

如果编译器知道RangedUnit是引用类型(不是值类型),为什么它不能有条件地执行简写语法

refTypeInstance?.SomeField = value;

(即如果 refTypeInstance 为空,则什么也不做。如果 refTypeInstance 不为空,则执行该语句)

更新(结论):

  • 空条件运算符不能用在赋值语句的左侧,因为这会违反赋值语句表达式树的预期求值逻辑(短路赋值操作而不执行它)
  • 理想的解决方案是一个新的条件赋值运算符(仅当赋值的左侧不为空时才执行),本质上是“如果不为空,一个赋值一个衬里”

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com