문제

내가 작성하는 앱에 다음 코드 섹션이 있습니다.

    ...
    String[] Columns = Regex.Split(CurrentLine, Delimeter);
    Nullable<Double> AltFrom;
    ...
    if (AltFrom == null)
    {
       Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
    }
    ...

IF 절의 선이 컴파일되지 않고 오류를 보여줍니다. 'Out Double?'에서 변환 할 수 없습니다. '더블 아웃'

내가 무효 유형으로 만들지 않고 오히려 그것을 두 배로 명시 적으로 명시하지 않으면 모든 것이 행복합니다.

확실히 이것은 유효한 코드입니다. 이것은 단지 C#의 버그입니까 아니면 내가 뭔가 잘못하고 있습니까?

도움이 되었습니까?

해결책

먼저 암시 적으로 변환 할 수 없습니다 double? a double. 그 이유는 double 만약 double? 대표 null 가치 (즉, value.HasValue 거짓입니까)? 즉, a에서 변환합니다 double? a double 정보 손실을 초래합니다 (좁은 전환입니다). 암시 적 좁은 전환은 일반적으로 프레임 워크에서 눈살을 찌푸립니다.

그러나 실제로 여기서보고있는 문제는 다른 것입니다. 당신이 수락하는 메소드가있을 때 out 유형의 매개 변수 T, 당신은 유형의 변수로 전달해야합니다 T; 이 경우에는 비가 없기 때문에 유형의 변형이 없습니다.ref 그리고 비out 매개 변수.

문제를 해결하려면 다음을 사용하십시오.

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}

다른 팁

아웃 매개 변수는 실제로는 필요하지 않습니다 double, Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top