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;
我想这就是基本功不扎实的一个体现吧,掩面泪奔...