+运算符的一点探究

问题起源于:有一个实体类,里面有个string的属性,比如这样

 
  
class Demo
{
public string str { get ; set ; }
}

Demo d
= new Demo();
d.str
+= " xxxxx " ;

实例化后直接对str属性进行加法操作,原先我一直这么写。但是某天突然想到:实例化Demo对象后str的值是null,进行加法操作怎么没出错呢?

于是先找到MSDN中对加法的解释:

 
  
+ 运算符既可作为一元运算符也可作为二元运算符。
一元
+ 运算符是为所有数值类型预定义的。对数值类型进行一元 + 运算的结果就是操作数的值。
为数值类型和字符串类型预定义了二元
+ 运算符。对于数值类型, + 计算两个操作数之和。当其中的一个操作数是字符串类型或两个操作数都是字符串类型时, + 将操作数的字符串表示形式串联在一起。
委托类型也提供二元
+ 运算符,该运算符执行委托串联。

一元的就不管它了,我们来看二元的。字符串预置了+运算符,其实就是调用String.Concat方法来进行相加,经过反编译可得知,里面运算时将null当做String.Empty空字符串来处理的,因此直接对属性str进行加法操作不会出错。

而当字符串与其它数据类型相加时,先将调用其它数据类型的ToString()方法来转成字符串,再进行相加。

数值型相加就比较简单了,但是有一个注意的地方时是数值型与null相加,结果是null。其实2+null,编译器会去寻找最匹配的+运算符重载,于是找到了int+int?,这里编译器将null当做int?,于是可以相加,证据见下图:

 

 

最后举几个综合例子:

 
  
1 + 1 + " x " = " 2x " ;
" x " + 1 + 1 = " x11 " ;
1 + null + 1 + " x " = " x " ;
" x " + null + 1 + 1 = " x11 " ;

提示一下:加法运算符是从左到右计算的。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jintianhu/archive/2010/11/02/1867119.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值