在C#中,您可以隐式连接一个字符串,比方说一个整数:
string sth = "something" + 0;
我的问题是:
为什么,假设您可以隐式地将一个字符串和一个int串联在一起,C#不允许像这样初始化字符串:
string sth = 0; // Error: Cannot convert source type 'int' to target type 'string'
C#如何将0转换为字符串。它是0.ToString()或者(string)0还是其他什么东西?
0.ToString()
(string)0
如何找到上一个问题的答案?
它编译为对的调用String.Concat(object, object),如下所示:
String.Concat(object, object)
string sth = String.Concat("something", 0);
(请注意,该特定行实际上将由编译器进行优化)
该方法的定义如下:(来自.Net参考源)
public static String Concat(Object arg0, Object arg1) { if (arg0==null) { arg0 = String.Empty; } if (arg1==null) { arg1 = String.Empty; } return Concat(arg0.ToString(), arg1.ToString()); }
(此电话String.Concat(string, string))
String.Concat(string, string)
要发现这一点,您可以使用ildasm或Reflector(在IL或C#中,不做任何优化)来查看+行被编译成的内容。
ildasm
+