C#中的字符串连接与DateTime对象:为什么我的代码合法?

时间:2014-04-09 21:06:20

标签: c# concatenation

在我正在处理的一些C#代码中,DateTime对象(dt)与两个字符串连接在一起:

string test = "This is a test " + dt + "...Why does this work?"

这不会引发编译错误并且工作正常。我的问题:为什么这是合法的?这仅适用于DateTime个对象,还是覆盖ToString()方法的任何对象?

2 个答案:

答案 0 :(得分:5)

它编译是因为C#规范声明+运算符的重载具有以下签名:

operator + (string str, object obj)

您正在提供一个string和一个可隐式转换为object的表达式,因此此运算符与其他符号不匹配您的参数,并进行编译。

在内部,此运算符的实现将调用string.Concat,它将使用其ToString方法将对象转换为字符串(假设它不为空),然后将字符串作为字符串连接。

答案 1 :(得分:0)

这是由于+运算符而执行的参数的隐式类型转换。

这里在规范中讨论过: http://msdn.microsoft.com/en-us/library/aa691375%28v=vs.71%29.aspx