2012-03-05 27 views
1

這樣的事情出現的時候,最佳方式改變可空類型,如果不爲空,但返回null空已經

這個工作,但醜:

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

此次榮獲」 t工作:

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

我同意!我通常訴諸於使用'如果'的聲明,我從來沒有滿意。 – Khan 2012-03-05 20:49:41

回答

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當然不會改變呼叫之間的類型。