为什么Nullable <t>的null-propagation返回T而不是Nullable <t>?

时间:2016-11-17 22:32:09

标签: c# nullable null-propagation-operator

请考虑以下代码:

Nullable<DateTime> dt;

dt. <-- Nullable<DateTime>
dt?. <-- DateTime

空传播返回T,而不是Nullable<T>

如何以及为何?

1 个答案:

答案 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#,但这就是它的行为。