请考虑以下代码:
Nullable<DateTime> dt;
dt. <-- Nullable<DateTime>
dt?. <-- DateTime
空传播返回T
,而不是Nullable<T>
。
如何以及为何?
答案 0 :(得分:5)
因为如果?.
左侧的对象为空,则空传播的方式为空,则不会执行右侧的对象。因为您知道右侧永远不会为空,所以为方便起见Nullable
,所以您不必每次都输入.Value
。
您可以将其视为
public static T operator ?.(Nullable<U> lhs, Func<U,T> rhs)
where T: class
where U: struct
{
if(lhs.HasValue)
{
return rhs(lhs.Value);
}
else
{
return default(T);
}
}
上面的代码不是合法的C#,但这就是它的行为。