C# 什么';.ToString()和+&引用&引用;
如果我有约会时间,我会:C# 什么';.ToString()和+&引用&引用;,c#,string,datetime,C#,String,Datetime,如果我有约会时间,我会: date.Year.ToString() 我把这一年当作弦。但如果我这样做了 date.Year + "" 不同之处在于,如果没有日期,第二个没有例外?(这是我的首选)当您编写date.Year+“”时,它将被编译为对以下内容的调用: 在内部,Concat方法将对每个(非空)对象调用ToString 如果date为null,这两种方法都将抛出null引用异常。但是你说date属于DateTime类型DateTime是一个结构,因此不能为空 如果date的类型为Da
date.Year.ToString()
我把这一年当作弦。但如果我这样做了
date.Year + ""
不同之处在于,如果没有日期,第二个没有例外?(这是我的首选)当您编写
date.Year+“”
时,它将被编译为对以下内容的调用:
在内部,Concat
方法将对每个(非空)对象调用ToString
如果date
为null
,这两种方法都将抛出null引用异常。但是你说date
属于DateTime
类型DateTime
是一个结构,因此不能为空
如果date
的类型为DateTime?
,如果date为null,则希望返回空字符串,则可以使用以下方法:
date.HasValue ? date.Value.Year.ToString() : ""
如果date.Year
不为空,则没有区别
在第二个示例中,ToString()
方法在date.Year
上隐式调用
date.Year.ToString()
如果日期为空,则不起作用
date.Year + ""
即使年份为空,也可以工作,因为二进制+运算符将空字符串替换为空字符串
这是MSDN关于连接两个字符串的二进制+运算符的说明:
当一个或两个操作数都是字符串类型时,二进制+运算符执行字符串串联。如果字符串串联的操作数为空,则替换空字符串。否则,任何非字符串参数都将通过调用从type对象继承的virtual ToString方法转换为其字符串表示形式。如果ToString返回null,则替换空字符串
更多关于嗯,我不这么认为!在第二种情况下,如果年份为空,我不会得到任何错误/异常。只是,它什么都不做…date.Year+“
即使date为null也能工作?真正地那么DateTime怎么可能是空的呢?马克说,它怎么是空的?这不是只有当它被声明为可空时才有可能吗?
date.Year + ""