".ToString()和+ ""有什么区别?"

5

如果我有一个 DateTime,然后我执行:

date.Year.ToString()

I get the Year as String. But Also if I do

date.Year + ""

今日免费次数已满, 请开通会员/明日再来
3个回答

10

当你编写 date.Year + "" 时,它将被编译为调用 string.Concat(object, object)

String.Concat(date.Year, "")

在内部,Concat方法将对每个(非空)对象调用ToString

如果datenull,则这两种方法都会抛出NullReferenceException。但是您说date的类型是DateTimeDateTime是一个结构体,因此不能为null。


如果date的类型为DateTime?,并且希望在日期为空时返回空字符串,则可以使用以下代码:

date.HasValue ? date.Value.Year.ToString() : ""

嗯,我不这么认为!在第二种情况下,如果年份为空,我不会收到任何错误/异常。只是,它什么也不做... - markzzz

4
date.Year.ToString()

如果日期为空,则无法工作。

date.Year + ""

即使年份为空,二进制+运算符仍然可以正常工作,因为它会用空字符串替换null。

以下是MSDN关于连接两个字符串的二进制+运算符的说明:

当一个或两个操作数为string类型时,二进制+运算符执行字符串连接。如果字符串连接的操作数为null,则会用空字符串代替。否则,任何非字符串参数都将通过调用从object类型继承的虚拟ToString方法转换为其字符串表示形式。如果ToString返回null,则会用空字符串代替。

更多信息请参见http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx


date.Year + "" 即使 date 为 null 也能工作?真的吗?那么 DateTime 怎么可能是 null 呢? - Mark Byers
2
马克说的,它怎么会是 null 呢?除非它被声明为可空类型,不然这不可能发生吧? - dbasnett

3

如果date.Year不为null,则没有任何区别。

在第二个例子中,ToString()方法会隐式调用date.Year


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接