3

私は別の4つのメソッド呼び出しの結果をパラメーターとして受け取るメソッド呼び出しを行っていますが、それらの呼び出しを行うメソッドはnullである場合とそうでない場合があります(それが絶望的に​​理解できない文である場合は申し訳ありません)。わかりやすくするためのコードは次のとおりです。

    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であるかどうかをすばやく簡単に確認し、条件文以外に「null」をメソッドに渡す方法があるかどうかを知りたいです。null/の16の可能なバリエーションすべてを明示的にコーディングする必要はありません。 nullではありません。

編集:混乱に応えて、これを明確にしたいと思います。ほとんどの場合、メソッドに渡すオブジェクトはnullにはなりません。通常、Roomオブジェクトは北、南、東、西にRoom存在し、存在する場合、GetNode()メソッドは適切なオブジェクトを返します。Roomメソッド呼び出しを行おうとしたときにnull参照の例外を回避するために、指定されたものが存在するかどうかを判断したいと思います。

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()が何か意味のあるものを返すようにします。基本的に、実際のnull参照を許可しないでください。

于 2012-04-18T01:12:20.027 に答える