2016-06-13 8 views
3

int 또는 decimal을 반환하는 삼항 연산자로 초기화되는 암시 적 변수 yesCount이 있습니다.암시 적 변수 선언 및 삼항 할당

List<int> simulationsCounters= new List<int>(); 
simulationsCounters.Add(5); 
var yesCount = simulationsCounters.Length > 0 
    ? simulationsCounters[0] 
    : 0m; 

컴파일러가 항상 yesCount를 소수로 컴파일합니까? 이것을 추론하는 과정은 무엇입니까?

+2

"항상 * something * (같은 것)이어야하고"int "와"decimal "이 주어지기 때문에 컴파일러는 항상 yesCount를 소수로 컴파일합니까? 우선 순위 규칙은'decimal' (내재적 대 명시 적) –

+0

그 음성 견적은 저를 깊이 파고 들었습니다. 이제는 직업을 포기할 것입니다. 감사. – theIrishUser

답변

6

의 int 또는 사실이 아니다 진수

을 반환하는 삼항 연산자. 삼항 연산자는 하나만 반환 유형을 가질 수 있습니다. 따라서 컴파일러는 연산자의 두 번째 부분이 decimal을 반환하고 첫 번째 부분의 intdecimal으로 캐스팅 될 수 있으므로이 반환 유형을 decimal으로 추론합니다.

해당 연산자의 반환 유형이 decimal이므로 var yesCountdecimal입니다.

+1

@theIrishUser는 구현 세부 사항을 알지 못합니다. 유형이 다르거 나 유형 a가 유형 b로 내재적으로 유형 변환 가능한 경우 afaik는 유형 b를 선택합니다. 두 유형간에 암시 적 변환이 없으면 컴파일러에서 오류가 발생합니다. –

+0

완벽한! 감사 ! – theIrishUser

+1

@theIrishUser 죄송합니다, 잘못된 링크 죄송합니다. https://msdn.microsoft.com/en-us/library/aa691313(v=vs.71).aspx –

2

삼항 연산자에는 정수와 소수의 두 개의 피연산자가 있습니다. 오른손 피연산자는 m이라는 접미사가 붙어 있으므로 십진수입니다. 즉, decimal을 의미합니다.

컴파일러는 현명한 캐스트를 사용하여 출력 변수에 가장 적합한 유형을 결정할 수 있습니다. int은 내재적으로 decimal으로 캐스팅 될 수 있지만 그 반대의 경우는 decimal이 가장 적합합니다. floatdouble에 대해서도 마찬가지입니다. double이 (가) 우승합니다.

+0

Aah, Perfect, Thanks! – theIrishUser