2017-01-10 1 views
0

? : 연산자를 사용하는 메서드에서 Nullable 형식을 반환하는 데 어려움이 있습니다. , 두 방법 모두에서 거의 같은 일을하고있다3 진 연산자를 사용하는 메서드에서 nullable 값을 반환하는 중

public static Int32? RunInt32Query(string query, KeyValueCollection parameters) 
    { 
     object scalar = RunScalarQuery(query, parameters); 

     return (scalar != null) ? Convert.ToInt32(scalar) : null; 
    } 

내가 그것을 알 수있는 바와 같이 :

public static Int32? RunInt32Query(string query, KeyValueCollection parameters) 
    { 
     object scalar = RunScalarQuery(query, parameters); 

     if (scalar != null) 
     { 
      return Convert.ToInt32(scalar); 
     } 
     else 
     { 
      return null; 
     } 
    } 

을하지만이 예제는 컴파일되지 않습니다 작동하지 않습니다

는 예를 들어,이 작품 높은 수준이지만 분명히 그렇지 않은가요?

+2

'작동하지 않습니다. ' –

+0

@ un-lucky 두 번째 예제에서는 컴파일되지 않습니다. –

답변

6

이 시도 :

return (scalar != null) ? (Int32?)Convert.ToInt32(scalar) : null; 

컴파일러는 타겟 타입 Int32? 자동 결과를 변환 할 수있다, 따라서 (있어서 선언에 기초하여)되어 있음을 알

return Convert.ToInt32(scalar); 

에서 식 Convert.ToInt32(scalar)은 암시 적 변환을 기반으로합니다.

조건부 연산자를 사용하면 컴파일러는 먼저 표현식 (scalar != null) ? Convert.ToInt32(scalar) : null의 형식을 확인하려고합니다. 이를 위해 Convert.ToInt32(scalar)null의 두 결과 식 유형을 평가합니다. 이러한 유형은 각각 Int32Object입니다. 두 표현식이 Int32?으로 변환 될 수 있다는 것은 컴파일러에게는 명확하지 않습니다.

+0

훌륭해, 고마워! –

관련 문제