?? 和 ??= 运算符(C# 参考):报仇符
作者:符咒法事网发布时间:2022-07-18分类:符咒浏览:100
如果左操作数的值不为null,则null 合并运算符??返回该值;否则,它会计算右操作数并返回其结果报仇符。如果左操作数的计算结果为非null,则??运算符不会计算其右操作数。
C# 8.0 及更高版本中可使用空合并赋值运算符??=,该运算符仅在左侧操作数的求值结果为null时,才将其右侧操作数的值赋值给左操作数报仇符。如果左操作数的计算结果为非null,则??=运算符不会计算其右操作数。
师父微信: sanqingge8
师父微信: sanqingge8
List int numbers = null;
int? a = null;
(numbers ??= newList int).Add( 5);
Console.WriteLine( string.Join( " ",numbers)); // output: 5
numbers.Add(a ??= 0);
Console.WriteLine( string.Join( " ", numbers)); // output: 5 0Console.WriteLine(a); // output: 0
??=运算符的左操作数必须是变量、??=或索引器元素报仇符。
在C# 7.3 及更早版本中,??运算符左操作数的类型必须是??或可以为null 的值类型报仇符。从C# 8.0 版本开始,该要求替换为以下内容:??和??=运算符的左操作数的类型必须是可以为null 的值类型。特别是从C# 8.0 开始,可以使用具有无约束类型参数的null 合并运算符:
privatestaticvoidDisplayT(T a, T backup){
Console.WriteLine(a ?? backup);
null 合并运算符是右结合运算符报仇符。也就是说,是窗体的表达式
a ?? b ?? cd??= e ??= f
会像这样求值
a?? (b ?? c)d ??= (e ??= f)
示例
??和??=运算符在以下应用场景中很有用:
在包含null 条件运算符?. 和?[]的表达式中报仇符,当包含null 条件运算的表达式结果为null时,可以使用运算符来提供替代表达式用于求值:
doubleSumNumbers( List double[] setsOfNumbers, intindexOfSetToSum )
returnsetsOfNumbers?[indexOfSetToSum]?.Sum ?? double.NaN;
varsum =SumNumbers( null, 0);Console.WriteLine(sum); // output: NaN
当使用可以为null 值类型并且需要提供基础值类型的值时报仇符,可以使用运算符指定当可以为null 的类型的值为null时要提供的值:
int? a = null; intb = a ?? -1;
Console.WriteLine(b); // output: -1
如果可以为 null 的类型的值为 null 时要使用的值应为基础值类型的默认值,请使用 NullableT.GetValueOrDefault方法报仇符。
从 C# 7.0 开始报仇符,可以使用 表达式作为 ?? 运算符的右操作数,以使参数检查代码更简洁:
publicstring Name {
get =name;
set =name = value ?? thrownewArgumentNullException(nameof(value), "Namecannot be null");
前面的示例还演示了如何使用 expression-bodied 成员来定义属性报仇符。
从 C# 8.0 开始报仇符,可以使用 ??= 运算符将这样的代码
if(variableis null)
variable = expression;
替换为以下代码:
variable??=expression;
运算符可重载性
运算符??和??=无法进行重载报仇符。
标签:报仇符
相关推荐
- 致“少年的你”,这张“护身符”请收好!:报仇符
- 冲击大赛三连冠!孙颖莎粉丝团现场派发大礼包,力争为陈梦报仇:报仇符
- 明星身份并不是逍遥法外的护身符,娱乐圈太“脏”,真的该洗洗了:报仇符
- 4-2!王楚钦为张本智和报仇,加冕世界杯冠军,背靠背夺冠:报仇符
- 冠军:伯明翰对女王公园巡游者!为老师报仇?为什么我期待伯明翰:报仇符
- 愤怒如虎,王楚钦为张本智报仇,夺得冠军,现场观众欣喜若狂:报仇符
- 江湖最厉害的五大暗器,让人闻风丧胆,生死符第二,第一意想不到:报仇符
- 有新护身符加持,轰-6可以更安全地在敌人头顶狂泻炸弹:报仇符
- 丈夫被暗杀,她为报仇,奋斗10年,登上权利巅峰,终于报仇雪恨:报仇符
- CBA今日比赛:申金战同病欲止败,京基战首钢报仇:报仇符
- 符咒排行