当参数为真时,指示结果的属性不为空?

问题描述

我有类似下面的方法

public Node? GetLastNode(bool createNewIfEmpty = false)
{
    // Return last node if any
    if (Nodes.Count > 0)
        return Nodes[Nodes.Count - 1];

    // Return a new appended node,if requested
    if (createNewIfEmpty)
    {
        Nodes.Add(new Node());
        return Nodes[0];
    }

    // Otherwise,return null
    return null;
}

启用可为空引用类型的情况下,是否有任何属性(或其他方式)指定只要 createNewIfEmpty 参数为 true,此方法从不返回 null?

解决方法

我不确定 NotNullIfNotNull 能否为您解决这个问题,但另一种方法是将方法一分为二,除非您有严格的要求从参数中控制它:

public Node? GetLastNode()
{
    // Return last node if any. Otherwise,return null
    return Nodes.Count > 0
        ? Nodes[^1]
        : null;
}

public Node GetOrCreateLastNode()
{
    // Add new node if the list is empty
    if (Nodes.Count == 0)
        Nodes.Add(new Node());

    // Return the last node
    return Nodes[^1];
}