为什么int型和字符串的连接在编译时没有问题?

本文关键字:编译 有问题 连接 int 字符串 为什么 | 更新日期: 2023-09-27 17:49:14

我在visual studio中有以下内容,这不是抱怨:

int? int1;
int? int2;
string str = int1 + "-" + int2;

我猜这将抛出一个异常在运行时的某个地方,但为什么visual studio允许这样?仅仅因为它可能是空的吗?null int是否与空字符串处理方式相同?

为什么int型和字符串的连接在编译时没有问题?

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

operator + (string s, object o)
operator + (object o, string s)

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

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

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

这里的+运算符是连接,而不是加法。

其次,+操作符以一种不会导致NullReferenceException s的方式为Nullable<T>重载。

然而,你的代码不会编译,因为你没有设置int1int2的值。但是,如果您使用null,那么string结果的代码将只是"-"。

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