为什么int和字符串的串联在编译时没有抱怨

dux*_*x-- 7 c#

我在视觉工作室有以下内容,并没有抱怨:

int? int1;
int? int2;

string str = int1 + "-" + int2;
Run Code Online (Sandbox Code Playgroud)

我的猜测是这会在运行时的某处抛出一个异常,但为什么visual studio允许这样做?只是因为它可能是空的?null int是否与null字符串一样处理?

Ser*_*rvy 9

+操作员有许多重载,其中两个是:

operator + (string s, object o)
operator + (object o, string s)
Run Code Online (Sandbox Code Playgroud)

这样做的结果是您可以将任何类型的对象"添加"到字符串中.

重载的实现将用于ToString获取该对象的字符串表示并将其与字符串连接.但是,它会将任何null对象(或多个字符串)视为空字符串,而不是在运行时抛出异常.

注意,作为传递int?object它的结果将导致值被装箱,因为它是一个结构,并且有拳击的特殊支持Nullable<T>,如果HasValue是假(即它在逻辑上表示空值)它的框null而不是拳击a Nullable表示null.


Dai*_*Dai 5

+这里的运算符是串联,而不是加法.

其次,+操作员以Nullable<T>不会导致NullReferenceExceptions 的方式过载.

但是,您的代码将无法编译,因为您尚未设置int1int2值.但是,如果您使用null,那么代码string结果将只是" -".

这是一个带代码的CodingGround项目,只输出" -":http://goo.gl/sHMqk4