字符串和整数,隐式和显式

Ros*_*tov 9 c# string int explicit implicit

有一个同事问我这个问题,在我脑子里迷茫的状态我没有答案:

你为什么这样做:

string ham = "ham " + 4;
Run Code Online (Sandbox Code Playgroud)

但不是:

string ham = 4;
Run Code Online (Sandbox Code Playgroud)

如果在连接时存在字符串转换的隐式转换/操作,为什么在指定为字符串时不一样?(当然,没有做一些运算符重载)

Bri*_*sen 19

当连接编译器时,将语句"ham" + 4转换为调用String.Concat,这需要两个object参数,因此值4被加框然后ToString在其上调用.

对于赋值,没有隐式转换intstring,因此您无法4string未明确转换的情况下分配给它.

换句话说,编译器处理两个赋值的方式非常不同,尽管它们在C#中看起来非常相似.