C# 为什么向字符串中添加整数会产生字符串?
我不明白,为什么在第一个写句子中5和7是数字(因此输出是12),而在最后一个写句子中5和7是C# 为什么向字符串中添加整数会产生字符串?,c#,C#,我不明白,为什么在第一个写句子中5和7是数字(因此输出是12),而在最后一个写句子中5和7是strings(因此输出是57)。 在C#规则中,如果写句子的第一个东西是string,那么其他东西也是string using System; namespace ConsoleApplication1 { class Program { static void Main(String[] args) {
string
s(因此输出是57)。
在C#规则中,如果写句子的第一个东西是string
,那么其他东西也是string
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(String[] args)
{
Console.WriteLine( 5 + 7 );
Console.WriteLine();
Console.WriteLine( "? " + 5 + 7 );
Console.ReadLine();
}
}
}
我不会说这是一个规则问题。这更像是编译器断言运算符优先级和优先级的方式
Int
也是一个包含方法和运算符的特定实现的类。基本上,您可以想象,如果在运算符的右侧有一个整数,则两个数字都将相加。在第一种情况下,第一个参数是整数5
,因此编译器将选择整数运算符的实现
string
也是一个类,它有自己的+
操作符实现,它将连接操作符右侧的项。由于每个对象都有一个ToString
方法,编译器在第二种情况下调用Int
的ToString
方法,将数字转换为字符串并将它们连接起来。因为在第二种情况下,在左侧有一个字符串
,编译器执行+
操作符的字符串
重载
您可以使用()
影响结果,因为它们具有更高的优先级。因此,将首先计算括号内的表达式:
Console.WriteLine( "? " + ( 5 + 7 ));
这次将首先执行
+
运算符重载的Int
实现,然后执行String
中的一个,您应该得到预期的12
作为输出。了解运算符重载。这是因为参数的组合顺序,在第一种情况下,有两个数字,所以它们加在一起。在第二种情况下,有一个字符串number,所以从左到右,它们将字符串与数字组合,成为字符串。那么它的左边是一个字符串和一个数字,这两个数字组合成一个字符串,因为“?”+5
生成了stringWtf,是这样吗?我费心写一个很长的答案,然后我就不能发布了?说真的@Neme这是重复的,我们不需要重复同一信息多次。在问题结束之前,张贴的答案就在那里。有时生活是不公平的:(