为什么我不能显式地将int转换为字符串?

Mat*_*tBH 15 c# casting

如果我尝试这样做它不起作用:

static void Main(string[] args)
{
    int a = 5000;
    Console.WriteLine((string)a);
}
Run Code Online (Sandbox Code Playgroud)

但不知何故,这工作正常:

static void Main(string[] args)
{
    int a = 5000;
    Console.WriteLine(a + "");
}
Run Code Online (Sandbox Code Playgroud)

这是为什么?是因为第一个尝试更改基类型,第二个只是将值附加到字符串?

lar*_*moa 47

int不能转换为string(1),但有一个运算符+接受int左手参数和string右手参数(2).该运算符转换为intto string并连接两个strings.

一种更好的方法可能就是使用Console.WriteLine(a);哪种方法a.ToString().

  • Upvote用于识别它是进行转换的操作员. (4认同)
  • Microsoft的C#语言规范(http://msdn.microsoft.com/en-us/library/ms228593.aspx)中的"7.8.4加法运算符"部分显示了该定义. (3认同)
  • @tinman你打败了我:"如果字符串连接的操作数为null,则替换为空字符串.否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示.如果ToString返回null,替换为空字符串." (3认同)

mus*_*fan 7

所以你得到一个编译时错误吧?问题是int没有显式地转换为字符串.

所以

(string)a
Run Code Online (Sandbox Code Playgroud)

不是有效的代码但是

a + ""
Run Code Online (Sandbox Code Playgroud)

意味着代码将起作用,因为它基本上被翻译成

a.ToString() + ""
Run Code Online (Sandbox Code Playgroud)

所以int被转换为字符串值


Mar*_*rco 5

你应该使用:

static void Main(string[] args)
{
    int a = 5000;
    Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)

隐含地调用 a.ToString()