c#string如何评估自己的值?

时间:2017-04-05 07:38:16

标签: c# .net expression operator-precedence

为什么这段代码

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

生成60ddd

和这一个

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

生成ddd302010

似乎很简单,但我无法理解它。 请告诉我可以去的方向,以便找到详细的答案。

谢谢!

5 个答案:

答案 0 :(得分:11)

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

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"

答案 1 :(得分:2)

这是因为从左侧到右侧评估表达式。在第一个例子中,30 + 20 + 10给你int + string(30 + 20 + 10) - int,“ddd” - string。在第二个例子中,“ddd”+ 30是一个字符串“ddd30”,它向它添加“20”和“10”。这完全取决于订单(除非你有禁忌)。

答案 2 :(得分:1)

操作员+有不同的重载:

  

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”这是整数+字符串操作本例中的运算符输出字符串所以60 +“ddd”将输出 60ddd

在以下表达式中:

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

首先“ddd”+ 30 评估了哪个字符串+整数操作发生,因此输出将 ddd30

然后 ddd30 + 20 将被评估,其中再次发生字符串+整数操作,因此输出将 ddd3020

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

答案 3 :(得分:1)

从左到右进行评估。第一个示例首先包含数字,因此它首先评估为数字。然后它发现它必须评估为字符串。第二个例子是另一种方式。它以字符串开头,并以字符串继续。

答案 4 :(得分:0)

这是因为从左到右的操作顺序。但是,分配是最后的操作。 为了确定价值,必须首先计算表达式。