在定义类属性的时候常常会像这样写:

class XX
{
private OO _oo;

public OO Oo
{
get
{
if (Oo ==null)
Oo
=new OO();

return _oo;
}
}
}

  

近日看到Oo get内的另一种写法:

get
{
return _oo ?? _oo =new OO { Name ="halo" };
}

呵,??的用法我懂,可是右边为什么能将赋值后的_oo返回我就不懂了。

一开始以为是??的特殊用法,于是去搜索,无果,所有关于这个操作符的解释都是若左边为空则返回右边的值。这下可真是慌了,毫无头绪啊,越简单的代码越可怕。

万幸,排除其它因素,剩下的就剩下一个 = 操作符了。msdn上关于它的说明第一句话就解开了我的疑问:

赋值运算符 (=) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。

这下全清楚了,return 得到了= 右边的东西,所以得到正确的结果。

回头想想,= 操作符的这个特性其实早就在用了,只是一直忽视而已:

int i, j;
i
= j =5;

我想这就是基本功不扎实的一个体现吧,掩面泪奔...

相关文章:

  • 2022-12-23
  • 2021-10-09
  • 2022-12-23
  • 2021-11-11
  • 2021-10-13
  • 2021-09-24
  • 2022-01-22
  • 2021-10-17
猜你喜欢
  • 2021-11-05
  • 2021-06-05
  • 2022-12-23
  • 2022-12-23
  • 2021-08-01
  • 2021-07-06
  • 2022-12-23
相关资源
相似解决方案