2012-03-05 1 views
1

는 이런 종류의 모든 시간을 오는 경우는 null 반환 :가장 좋은 방법은</p> <p>이 작동하지만 못생긴, nullable 형식을 변경, null가 아닌 경우, 만, null가 이미

DateTime? firstDay = null; 
if (Day.HasValue) firstDay = Day.Value.AddDays(-14); 

이 원 ' 일 :

DateTime? firstDay = Day.HasValue? Day.Value.AddDays (-14) : null;

하지 않는 :

DateTime? firstDay = Day.HasValue ? Day.Value.AddDays(-14) : (DateTime?)null; 

어쩌면 또 다른 운영자가 있어야한다!

DateTime? firstDay = Day ??? Day.Value.AddDays(-14); 
+0

동의! 나는 보통 'if'문을 사용하고 그것에 결코 만족하지 않는다. – Khan

답변

2

는 뭐가 잘못 :

DateTime? firstDay = Day.HasValue ? Day.Value.Add(-14) : Day;

5

당신은 그런 Nullable<T>

public static Nullable<T> TransformIfNotNull<T>(this Nullable<T> value, 
               Func<T, T> transformer) 
    where T : struct 
{ 
    return value == null ? value : transformer(value.Value); 
} 

에 확장 메서드를 추가 할 수 있습니다

DateTime? firstDay = Day.TransformIfNotNull(x => x.AddDays(-14)); 

참고 비록이 캐스팅없이 작동하지 않습니다 리터럴 null, 당신이 사용할 수있는 사용하여 버전 :

DateTime? firstDay = Day.HasValue ? Day.Value.AddDays(-14) : Day; 

... 알고 있다고 가정하면 Day은 통화간에 유형이 변경되지 않습니다.

관련 문제