0

私は常にこの種の問題に対処しており、洗練されたエレガントな回避策があるかどうか疑問に思っていました:

if(myObject != null && myObject.myProperty != myValue){
//do something
}else{
//do something else
}

このロジックを実行すると、myObject が null のときに null 参照を取得するため、次のようにします。

if(myObject != null){
    if(myObject.myProperty != myValue){
        //do something
    }else{
        //do something else
    }
}else{
    //do something else
}

それで、「何か他のことをする」ことに冗長なコードができてしまいます。皆さんはこれをどのように処理しますか?

4

3 に答える 3

2

最初のチェックはnull、論理積()を使用する場合、2番目の条件が満たされない場合は評価されないことを意味し&&ます。したがって、null参照例外は、後者の条件ではなく、他の場所から発生することをお勧めします。

于 2012-11-21T17:30:58.587 に答える
2

これに対処するための「エレガントな」方法はありません。「何か他のことをする」というコードを共有する2つの方法は、実際にはさまざまな程度の非エレガントです。

  • 「何か他のことをする」コードを関数に入れるか、または
  • を入力する前にフラグを定義して、追加の処理が必要かどうかを示し、ステートメントifの終了時にフラグに基づいて動作します。if

最初の解決策は自明です。2番目の解決策は次のようになります。

var processed = false;
if(myObject != null) {
    if(myObject.myProperty != myValue){
        //do something
        processed = true;
    }
    // do more stuff knowing that myObject is not null
}
if (!processed) {
    // do something else
}
于 2012-11-21T17:31:27.463 に答える
-2

最初のステートメントは完全に有効です。

if(myObject != null && myObject.MyProperty != myValue)

これが行うことは、myObject != null最初に評価されることです&&。その右側に a があるため、false の場合は、他の節を評価する必要さえありません。

ここに貼り付けたコードをコピーして貼り付けるだけで、正常に動作することがわかると思います

于 2012-11-21T17:29:14.850 に答える