C#中对象非空时为属性赋值的更简洁写法是什么?
C#当前版本(截至C# 12)确实不支持_myVariable?.Value = 5这类空条件运算符左值赋值语法,核心原因是空条件运算符的求值结果为右值,语法规范上不允许作为赋值操作的左操作数。
如果你希望减少显式if的书写,有两种可选的封装方式,但存在额外开销,适合非高频调用场景:
- 第一种是封装通用扩展方法:
public static void IfNotNull<T>(this T? instance, Action<T> setterAction) where T : class { if (instance is not null) setterAction(instance); }
调用方式:
_myVariable.IfNotNull(x => x.Value = 5);
- 第二种是针对特定类型封装SetValue方法,直接适配现有空条件调用语法:
public void SetValue(int value) { Value = value; }
调用方式:
_myVariable?.SetValue(5);
原生语法下最推荐你当前使用的if写法,没有任何额外性能开销,可读性也最高,不需要额外做冗余封装。
内容的提问来源于stack exchange,提问作者SomeRandomGuy
相关产品推荐
相关产品推荐

