C#のnull 条件演算子を使用すると、便利な短絡が可能になります。
double? range = (unit as RangedUnit)?.WeaponRange;
残念ながら、null 条件演算子は値を返すため (左手代入では使用できません)、省略形代入と同じ方法で使用することはできません。
(unit as RangedUnit)?.PreferredTarget = UnitType.Melee;
その結果、可能な代替構文が得られます。
if (unit is RangedUnit)
{
(unit as RangedUnit).PreferredTarget = UnitType.Melee;
}
RangedUnit が参照型 (値型ではない) であることをコンパイラが認識している場合、条件付きで短縮構文を実行できないのはなぜですか?
refTypeInstance?.SomeField = value;
(つまり、refTypeInstance が null の場合は何もしません。refTypeInstance が null でない場合は、ステートメントを実行します)
更新 (結論):
- null 条件演算子は、代入ステートメントの式ツリーの予想される評価ロジックに違反するため、代入ステートメントの左側では使用できません (代入操作を短絡させ、まったく実行しません)。
- 理想的な解決策は、新しい条件付き代入演算子 (代入の左辺が null でない場合にのみ実行される) です。