Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么向字符串中添加整数会产生字符串?_C# - Fatal编程技术网

C# 为什么向字符串中添加整数会产生字符串?

C# 为什么向字符串中添加整数会产生字符串?,c#,C#,我不明白,为什么在第一个写句子中5和7是数字(因此输出是12),而在最后一个写句子中5和7是strings(因此输出是57)。 在C#规则中,如果写句子的第一个东西是string,那么其他东西也是string using System; namespace ConsoleApplication1 { class Program { static void Main(String[] args) {

我不明白,为什么在第一个写句子中5和7是数字(因此输出是12),而在最后一个写句子中5和7是
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这是重复的,我们不需要重复同一信息多次。在问题结束之前,张贴的答案就在那里。有时生活是不公平的:(