如果我有DateTime,我会这样做:
date.Year.ToString()
我将年份作为字符串。但是,如果我这样做
date.Year + ""
差异只是如果没有日期,第二个不会得到例外? (我先发制人)
答案 0 :(得分:10)
当您编写date.Year + ""
时,它将被编译为对string.Concat(object, object)
的调用:
String.Concat(date.Year, "")
在内部,Concat
方法将在每个(非空)对象上调用ToString
。
如果NullReferenceException
为date
,则这两种方法都会抛出null
。但是您说date
的类型为DateTime
。 DateTime
是一个结构,因此不能为空。
如果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
方法。