2008-09-17 3 views
7

다음 반환속기 경우 + nullable 형식 (C#을)

사이에 암시 적 변환이 없기 때문에 조건식의 유형을 확인할 수 없습니다 '더블'과 '< 널 >'

aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null) 

왜 aNullableDouble이 생성 된 Ent의 속성이기 때문에 aDouble과 왕복 대신 aNullableBool을 사용할 수 없는지 이유가 있습니다. ity out으로 사용할 수없는 __Framework 클래스.

답변

9
aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null; 
1
aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null) 
+0

new Nullabled() ?! 그게 더블이 아니야? 구문은 무엇입니까?! – ljs

+0

그래, 그게 효과가있을거야. 내 표현은 더 명확하지만 두 형식 모두 동일한 코드를 생성합니다. –

7

그냥 ... 쉽게 읽을 수 있습니다 대신 속기의 전체 구문에 밖으로 구문을 날려 :

aNullableDouble = null; 
if (double.TryParse(aString, out aDouble)) 
{ 
    aNullableDouble = aDouble; 
} 
+0

니스. 그것은 명확성을 추가합니다. – ljs

0

.NET이 nullable types을 지원하지만이를 선언하여 당신이 그들을 조금 다르게 다루어야하기 때문에 (이해할 수 있듯이, 일반적으로 값 유형 인 것은 현재 일종의 참조입니다.)

자동 생성 된 클래스 집합과 같이 nullable double과 regular double 간의 변환을 너무 많이하면 결국 도움이되지 않을 수 있습니다.

1

nullable 형식을 사용하는 흥미로운 부작용은 당신이 속기 IF를 실제로 사용할 수 없다는 것입니다. 속기 IF는 두 조건 모두에서 동일한 Type을 반환해야하며 두 경우 모두 null이 될 수 없습니다. 그럼 캐스트하거나 쓰십시오 :)