我正在尝试收集C#中发生装箱的所有情况:
将值类型转换为System.Object类型:
struct S { }
object box = new S();
Run Code Online (Sandbox Code Playgroud)将值类型转换为System.ValueType类型:
struct S { }
System.ValueType box = new S();
Run Code Online (Sandbox Code Playgroud)将枚举类型的值转换为System.Enum类型:
enum E { A }
System.Enum box = E.A;
Run Code Online (Sandbox Code Playgroud)将值类型转换为接口引用:
interface I { }
struct S : I { }
I box = new S();
Run Code Online (Sandbox Code Playgroud)在C#字符串连接中使用值类型:
char c = F();
string s1 = "char value will box" + c;
Run Code Online (Sandbox Code Playgroud)
注意:char类型的常量在编译时连接在一起
注意:由于6.0版的C#编译器优化串联涉及bool,char,IntPtr, …
在C#中,你可以隐式地连接一个字符串,让我们说一个整数:
string sth = "something" + 0;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么,假设您可以隐式地连接字符串和int,C#不允许初始化字符串,如下所示:
string sth = 0; // Error: Cannot convert source type 'int' to target type 'string'
Run Code Online (Sandbox Code Playgroud)C#如何将0转换为字符串.它是0.ToString()或者(string)0还是其他什么东西?