为什么int型和字符串的连接在编译时没有问题?
本文关键字:编译 有问题 连接 int 字符串 为什么 | 更新日期: 2023-09-27 17:49:14
我在visual studio中有以下内容,这不是抱怨:
int? int1;
int? int2;
string str = int1 + "-" + int2;
我猜这将抛出一个异常在运行时的某个地方,但为什么visual studio允许这样?仅仅因为它可能是空的吗?null 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>
重载。
然而,你的代码不会编译,因为你没有设置int1
和int2
的值。但是,如果您使用null
,那么string
结果的代码将只是"-
"。
这是一个CodingGround项目与您的代码,它只输出"-
":http://goo.gl/sHMqk4