我在视觉工作室有以下内容,并没有抱怨:
int? int1;
int? int2;
string str = int1 + "-" + int2;
Run Code Online (Sandbox Code Playgroud)
我的猜测是这会在运行时的某处抛出一个异常,但为什么visual studio允许这样做?只是因为它可能是空的?null int是否与null字符串一样处理?
+操作员有许多重载,其中两个是:
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.
+这里的运算符是串联,而不是加法.
其次,+操作员以Nullable<T>不会导致NullReferenceExceptions 的方式过载.
但是,您的代码将无法编译,因为您尚未设置int1和int2值.但是,如果您使用null,那么代码string结果将只是" -".
这是一个带代码的CodingGround项目,只输出" -":http://goo.gl/sHMqk4