在C#中识别空对象

时间:2012-04-18 01:09:34

标签: c# xna

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

    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());
    }

基本上,我想知道是否有一种快速简便的方法来检查一个对象是否为空并且除了条件之外简单地将'null'传递给方法 - 我不应该为所有16种可能的变化显式编码null / not null。

编辑:为了回应混淆,我想澄清一下:大部分时间我传入方法的对象都不会为空。通常,对于北,南,东和西存在Room个对象,如果存在Room,则GetNode()方法将返回适当的对象。我想确定给定Room是否存在以避免在尝试进行方法调用时出现空引用删除。

3 个答案:

答案 0 :(得分:9)

创建extension method

static Node GetNodeOrNull(this Room room)
{
  return room == null ? null : room.GetNode();
}

答案 1 :(得分: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();
    }

答案 2 :(得分:3)

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