c# string 如何计算它自己的值?

How does c# string evaluates its own value?

为什么这段代码

string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);

产生 60ddd,

还有这个

string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);

产生 ddd302010?

看似很简单,但我就是想不通。 请告诉我方向,以便找到详细的答案。

谢谢!

这是因为表达式是从左到右求值的。在第一个例子中,30 + 20 + 10 给你 int + string (30 + 20 + 10) - int, "ddd" - string。在第二个示例中,"ddd" + 30 是一个字符串 "ddd30",它附加了“20”和“10”。一切都与顺序有关(除非您有括号)。

运算符 + 有不同的重载:

int + int = int

int + string = string

string + int = string

在以下表达式中:

string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);

首先 30 + 20 得到的评估都是整数,因此运算符的输出将是整数,即 50.

然后 50 + 10 将被评估,它们都是整数,所以整数将被输出,即 60.

然后60 + "ddd"integer + string 操作运算符在这种情况下输出字符串 so 60 + "ddd"将输出 60ddd.

在以下表达式中:

string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);

首先 "ddd" + 30 得到了评估,其中字符串 + 整数运算发生,因此输出将是 ddd30.

然后 ddd30 + 20 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd3020.

然后 ddd3020 + 10 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd302010.

这是因为,操作顺序是从左到右。但是赋值是最后一个操作。 要赋值,首先必须计算表达式。

它是从左到右计算的。第一个示例首先是数字,因此它首先评估为数字。然后它发现它必须评估为字符串。第二个例子是相反的。它以字符串开头并以字符串继续。

您显示的表达式中的 + 运算符具有相同的优先级,因为它们是相同的运算符,因此从左到右计算:

30 + 20 + 10 + "ddd"
-- + (int, int) returns (int)50
------- + (int, int) returns (int)60
------------ + (object, string) returns (string)"60ddd"

那么另一种情况:

"ddd" + 30 + 20 + 10
----- + (string, object) returns (string)"ddd30"
---------- + (string, object) returns (string)"ddd3020"
--------------- + (string, object) returns (string)"ddd302010"