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

mar*_*zzz 5 c# string datetime

如果我有一个DateTime,我会:

date.Year.ToString()
Run Code Online (Sandbox Code Playgroud)

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

date.Year + ""
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 10

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

String.Concat(date.Year, "")
Run Code Online (Sandbox Code Playgroud)

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

这两种方法都将抛出NullReferenceException,如果datenull.但你说的date是类型DateTime.DateTime是一个结构,因此不能为null.


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

date.HasValue ? date.Value.Year.ToString() : ""
Run Code Online (Sandbox Code Playgroud)


Pra*_*lla 4

date.Year.ToString()
Run Code Online (Sandbox Code Playgroud)

如果日期为空,则不起作用。

date.Year + ""
Run Code Online (Sandbox Code Playgroud)

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

MSDN 对于连接两个字符串的二元 + 运算符是这么说的:

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

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

  • 马克所说的,怎么就无效了呢?难道只有将其声明为可空才可能吗? (2认同)