这种事情一直都会出现,
这很有效,但很难看:
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 :(得分: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
当然不会改变通话之间的类型。
答案 1 :(得分:2)
出了什么问题:
DateTime? firstDay = Day.HasValue ? Day.Value.Add(-14) : Day;
答案 2 :(得分:2)
自all operations on nullable types are null-propagating except concatenation起,您可以使用:
DateTime? Day = ...;
...
DateTime? firstDay = Day + TimeSpan.FromDays(-14);