.ToString()和+“”之间有什么区别

时间:2011-12-07 09:21:35

标签: c# string datetime

如果我有DateTime,我会这样做:

date.Year.ToString()

我将年份作为字符串。但是,如果我这样做

date.Year + ""

差异只是如果没有日期,第二个不会得到例外? (我先发制人)

3 个答案:

答案 0 :(得分:10)

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

String.Concat(date.Year, "")

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

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


如果date的类型为DateTime?,并且想要在date为null时返回空字符串,那么您可以使用它:

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

答案 1 :(得分:4)

date.Year.ToString()

如果date为null,则无效。

date.Year + ""

即使year为null也可以工作,因为binary +运算符用空字符串替换null。

这就是MSDN所说的关于二元+运算符连接两个字符串的内容:

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

有关http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx

的更多信息

答案 2 :(得分:3)

如果date.Year不为空,则没有区别。

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