XML 파일을 구문 분석하기 위해 LINQ 및 XDocument를 사용하고 있습니다. XML의 필드 중 일부는 고정되어 있지 않으며 때때로 이중 또는 문자열 일 수 있습니다. 일반적으로 double이되지만 문자열은 데이터를 사용할 수 없음을 나타냅니다. 예를 들어Nullable에 문제가 있습니다. <T>
는 :
<current_observation>
<temp_c>12.1</temp_c>
<temp_c>NA</temp_c>
</current_observation>
나는 XML 필드에서 읽은 다음 새 객체 인스턴스의 속성을 설정합니다. 이처럼 : 나는 이중에 필드를 구문 분석하는 중 TryParse
를 사용하거나이 불가능했던 경우 null로 속성을 설정할 수 있도록 Nullable
유형을 사용하기로 결정
var data = from i in weatherResponse.Descendants("current_observation")
select new CurrentConditions
{
// Attempt to parse. Set to null if not a double.
// This is one of the areas I'm having trouble with.
TemperatureC = Utilities.ParseDoubleValue(i.Element("temp_c"))
// If I use the following line instead then it works without problem.
// But this misses out all of the safe parsing.
// TemperatureC = (double)i.Element("temp_c")
};
. 여기
내가 현장을 시도하고 구문 분석하는 데 사용하고 코드입니다 : 그러나public static class Utilities
{
public static double? ParseDoubleValue(object inputValue)
{
if (inputValue == null)
return null;
double returnValue;
return double.TryParse(inputValue.ToString(), out returnValue) ? returnValue : (double?)null;
}
}
를, 내가 이렇게하면 때문에 내 코드에서 그 곳이 실제로 제대로 필드를 구문 분석되지 않은 것 같습니다 :
if(currentConditions.TemperatureC.HasValue)
Console.WriteLine("Has a value: {0}", currentConditions.TemperatureC.Value);
else
Console.WriteLine("Not Avaliable.");
다음 HasValue는 항상 거짓를 반환합니다.
내 질문 : 왜 값을 파싱하려고 시도하는 나의 방법이 작동하지 않습니까? TryParse
및 null 입력 가능 유형을 오해 한 적이 있습니까?
세트 일부 중단 점 및 코드의 상태를 검사 ParseDoubleValue에 대한 –
귀하의 로직은 비트 로터리입니다. 이미 삼항 연산자를 가지고 있기 때문에 처음에는 if 블록이 필요 없으며, null을 명시 적으로'double? '으로 캐스팅 할 필요가 없습니다. –