2012-04-18 4 views
3

私はパラメータとして別の4つのメソッド呼び出しの結果を取ります。ただし、これらの呼び出しを行うメソッドはnullでもかまいません(判読不能な文であれば申し訳ありません)。基本的にはC#でヌルオブジェクトを特定する

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で、単純にconditionals--以外にも方法にnullを渡すかどうかを確認するために迅速かつ簡単な方法があるかどうかを知りたい:それは明確に物事を行う場合ここでのコードは、です私はむしろnull/not nullの16の可能なすべてのバリエーションを明示的にコード化する必要はありません。

EDIT:混乱に応答して、私はこれを明確にしたいと思います:ほとんどの場合、メソッドに渡すオブジェクトはnullになりません。通常、北、南、東、西についてはRoomオブジェクトが存在し、Roomが存在する場合、GetNode()メソッドは適切なオブジェクトを返します。メソッドの呼び出しを試みたときにnull参照を避けるために、与えられたRoomが存在するかどうかを調べたいと思います。

+1

を作成します。オブジェクトが 'null'で、' null'を渡したいのであれば...なぜオブジェクトを渡すだけではないのですか? 'null'値が通過します。おそらく、想定している16種類のコードの短いサンプルを投稿することができます。その結果、あなたが望む結果を正確に見ることができますか? – Domenic

+0

これは別のSOの質問の欺瞞だが、私はそれを見つけることができません。 'node.Inform(north == null?null:north.GetNode()、...);' –

+0

これは正しいものではありませんが、これに似ています。http ://stackoverflow.com/questions/550374/checking-for-null-before-tostring –

答えて

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

コードの残りの部分(これは私が持っている:)を無視して) - あなたはNull Patternを使うことができます。たとえば、NullRoomクラスがあり、GetNode()が意味のある何かを返すようにします。基本的には、実際のヌル参照を許可しないでください。

9

ご質問は混乱してextension method

static Node GetNodeOrNull(this Room room) 
{ 
    return room == null ? null : room.GetNode(); 
} 
関連する問題