환경 : 비주얼 스튜디오 2015널 조건 연산자
시간대 : : UTC + 7시, 방콕
문제 : DateTimeOffset으로 널 (NULL) varialbe에 (?을 DateTimeOffset)의 조건부 연산자를 사용하면 예외가 발생합니다. 즉, 값이 NULL (DateTimeOffset? 값) 인 경우에도 여전히 메서드를 호출합니다. ToLocalTime()은 ToLocalTime을 호출하고 예외를 발생시킵니다.
쿼리 :이 UTC 잘 작동 내가 널 조건 연산자를 사용하거나 연산자 대신 GetValueOrDefault를 사용하지 않음으로써 그것을 해결할 수 있지만 그것이 모든 UTC +에서 시간대 예외 resutls 이유를 이해하려면 - TimeZone이를
코드 :
var dateTimeMinimum = DateTime.MinValue;
var value = (object)dateTimeMinimum; // Mimic the WPF converter behavior
var a1 = value as DateTimeOffset?; // This works
if (a1 != null)// This works as it won't execute the code in the 'if'loop
{
var b1 = (a1 as DateTimeOffset?)?.ToLocalTime();
}
var dto = (value as DateTimeOffset?)?.ToLocalTime() ?? (DateTime)value;// This breaks with following exception
편집 : 내가 뭔가를하지 않는 널 조건 연산자
var a1 = value as DateTimeOffset?;
를 사용하지 않는 내가 코드 즉
DateTime dateTimeMinimum = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
여기 내 쿼리가 생각의 문제를 해결하는 방법에는 여러 가지가 이해
, 예외가 발생합니다. 널 조건 연산자는 당 변수를 펼쳤다 때문인가요 블로그 다음
http://www.ninjacrab.com/2016/09/11/c-how-the-null-conditional-operator-works-with-nullable-types/
나는 간단한 캐스팅 '으로'연산자를 사용하는 경우 때 내가 널 조건 연산자를 사용하면 고장 및 작동 이유를 이해하는데 더 관심 DateTimeKind.Utc
EDIT2을 사용하지 않고 :
이 DateTimeOffset으로 (.NET 프레임 워크 코드)의 생성자이며 ValidateOffset 방법에 나옵니다. 소스-http://referencesource.microsoft.com/#mscorlib/system/datetimeoffset.cs,68b4bb83ce8d1c31
// Constructs a DateTimeOffset from a DateTime. For Local and Unspecified kinds,
// extracts the local offset. For UTC, creates a UTC instance with a zero offset.
public DateTimeOffset(DateTime dateTime) {
TimeSpan offset;
if (dateTime.Kind != DateTimeKind.Utc) {
// Local and Unspecified are both treated as Local
offset = TimeZoneInfo.GetLocalUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime);
}
else {
offset = new TimeSpan(0);
}
m_offsetMinutes = ValidateOffset(offset);
m_dateTime = ValidateDate(dateTime, offset);
}
해당 예외가 발생했을 때의 오프셋 값은 무엇입니까? 오류 메시지는 결과 연도가 0보다 작거나 10K보다 큼을 제안하는 것 같습니다 – pquest
DateTime.MinValue –
오프셋 값입니까? – pquest