有一个同事问我这个问题,在我脑子里迷茫的状态我没有答案:
你为什么这样做:
string ham = "ham " + 4;
但不是:
string ham = 4;
如果在连接时存在字符串转换的隐式转换/操作,为什么在将其指定为字符串时不一样?(当然,没有做一些运算符重载)
当连接编译器时,将语句"ham" + 4
转换为调用String.Concat
,这需要两个object
参数,因此值4
被加框然后ToString
在其上调用.
对于赋值,没有隐式转换int
为string
,因此您无法4
在string
未明确转换的情况下分配给它.
换句话说,编译器处理两个赋值的方式非常不同,尽管它们在C#中看起来非常相似.