C# 中 = 运算符易忽视的另一用途

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

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;

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

posted @ 2011-08-11 17:47  _龙猫  阅读(337)  评论(0编辑  收藏  举报