2017-04-05 10 views
7

C# string은 자체 값을 어떻게 평가합니까?

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

60ddd 생산이 코드 조각,

이 하나

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

ddd302010를 생산합니까?

매우 단순한 것 같지만 주위를 둘러 볼 수 없습니다. 자세한 답변을 찾으려면 내가 갈 수있는 방향을 보여주십시오.

감사합니다.

+4

[ 연산자 연관성] (https://en.wikipedia.org/wiki/Operator_associativity) 및 [C# 구체적] (https://msdn.microsoft.com/en-gb/library/aa691323(v=vs.71))에 대한 정보를 제공합니다. –

+0

[우선 순위 및 평가 순서] (https://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx) – Aron

+0

@Damien_The_Unbeliever 사실,이 경우에는 '연산자 + (int, int)'와 '연산자 ((string) int, string)'의 혼란이 혼동의 원인이됩니다. – Aron

답변

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 + 3 * 5'는 왼쪽에서 오른쪽으로 평가되지 않을 것입니다. –

+0

@Damien은 절대적으로 정확합니다. 감사합니다. 편집을 참조하십시오. – CodeCaster

+1

나는이 연산자가 모두 * 같은 * 연산자이므로 우선 순위가 같고 C# (그리고 대부분의 다른 언어도 마찬가지 임)에서 연관성이 남겨져 있기 때문에 강조 표시하겠습니다. –

2

표현식이 왼쪽에서 오른쪽으로 계산되기 때문입니다. 첫 번째 예에서 30 + 20 + 10은 int + string (30 + 20 + 10) - int, "ddd"문자열을 제공합니다. 두 번째 예에서 "ddd"+ 30은 "20"과 "10"을 추가하는 문자열 "ddd30"입니다. 순서에 관한 것입니다 (paranthesis가없는 경우).

1

연산자 +는 다른 과부하가 있습니다

INT + INT = INT

INT + 문자열 = 문자열을

문자열 + INT = 문자열 다음의 식에

:

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

처음으로 30 + 20 평가 결과가 모두 정수이므로 연산자의 출력은 인 정수가됩니다.

나서 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을 할 수 있도록하는 다시 문자열 + 정수 연산이 수행 평가를 얻을 것이다.

0

왼쪽에서 오른쪽으로 작업 순서가 있기 때문에 이런 일이 발생합니다. 그러나 양보는 마지막 작업입니다. 값을 assing하려면 첫 번째 표현식을 계산해야합니다.

1

왼쪽에서 오른쪽으로 평가됩니다. 첫 번째 예제에서는 숫자가 먼저 있으므로 숫자로 평가하여 시작합니다. 그런 다음 문자열로 평가해야한다는 것을 알게됩니다. 두 번째 예제는 다른 방법입니다. 문자열로 시작하여 문자열로 계속됩니다. 그들은 같은 연산자이기 때문에 당신이 보여 발현