3

我正在进行一个方法调用,它将另外四个方法调用的结果作为参数——但是进行这些调用的方法可能为空,也可能不为空(抱歉,如果这是一个无法理解的句子)。这是代码,如果它使事情更清楚:

    public void Inform(Room north, Room south, Room east, Room west)
    {
        this.north = north;
        this.south = south;
        this.east = east;
        this.west = west;

        node.Inform(north.GetNode(), south.GetNode(),
                    east.GetNode(), west.GetNode());
    }

基本上,我想知道是否有一种快速简便的方法来检查对象是否为空,并且只需将“空”传递给除条件之外的方法——我宁愿不必为空/的所有 16 种可能变体显式编码不为空。

编辑:为了应对混乱,我想澄清这一点:大多数情况下,我传递给方法的对象不会为空。通常,Room对象存在于北、南、东和西,如果Room存在,GetNode() 方法将返回适当的对象。我想确定一个给定的是否Room存在以避免在尝试进行方法调用时出现空引用异常。

4

3 回答 3

9

创建扩展方法

static Node GetNodeOrNull(this Room room)
{
  return room == null ? null : room.GetNode();
}
于 2012-04-18T01:16:54.480 回答
4
 public void Inform(Room north, Room south, Room east, Room west)
    {
        this.north = north;
        this.south = south;
        this.east = east;
        this.west = west;

        node.Inform(GetNode(north), GetNode(south),
                    GetNode(east),GetNode(west));
    } 

    private Node GetNode(Room room)
    {
        return room == null ?  null : room.GetNode();
    }
于 2012-04-18T01:21:17.470 回答
3

忽略其余代码(我必须这样做:))-您可以开始使用 Null 模式。例如,有一个 NullRoom 类并让它的 GetNode() 返回一些有意义的东西。基本上从不允许实际的空引用。

于 2012-04-18T01:12:20.027 回答