在我正在处理的一些C#代码中,DateTime
对象(dt
)与两个字符串连接在一起:
string test = "This is a test " + dt + "...Why does this work?"
这不会引发编译错误并且工作正常。我的问题:为什么这是合法的?这仅适用于DateTime
个对象,还是覆盖ToString()
方法的任何对象?
答案 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