質問

私エクスペディアの扱いにnullの参照オブジェクト上位の階層となります。

ie:

if(null == Object1.Object2.Object3.Property)

この例するNull以外の参照例外の場合もObject2はnullになります。

私の場合は注意を払っていない何かがnullの場合、そのものです。んですが、いい/捕それぞれの場所をもう少し前向きなことをやりたいこのような、見ています。

私は実は??オペレーターがこも醜みコードします。

そのアイデア。

他のヒント

この(nullで安全な間接参照)時折上げます何かあり、なし。

:以外に現時点では何もきちんと答えは、ありません
if(Object1 == null || Object1.Object2 == null
        || Object1.Object2.Object3 == null
        || Object1.Object2.Object3.Property == null)

あなたは(変数を導入することにより)必要がある場合は、いくつかのマイナーなキャッシングを行うことができますが、それはさらに醜い取得します。

SomeType2 obj2;
SomeType3 obj3;
if(Object1 == null || (obj2 = Object1.Object2) == null
        || (obj3 = obj2.Object3) == null
        || obj3.Property == null)

あなたは本当に、<全角>本当にが二度プロパティを呼び出すにしたくない場合を除き、一般的には、私は上記のに対して助言する(それは財産よりも多くの作業を行うために必要があります)。

あなたはヌルオブジェクトパターンを使用することができます。

class Car {
    Engine engine = null;

    public Engine Engine { 
        get { 
            return engine ?? new NullEngine();
        }
    }
}

class Engine {
    string make;
    public virtual string Make { get { return make; } }
}

class NullEngine : Engine {
    public override string Make { get { return null; } }
}

次に、あなたが行うことができます:

Car car;
if (car.Engine.Make != null) Console.WriteLine(car.Engine.Make);

の代わりに:

Car car;
if (car.Engine != null && car.Engine.Make != null) Console.WriteLine(car.Engine.Make);   

あなたの全体モデルの「ヌルオブジェクト」を定義する作業のかなり多くあることに注意してください。また、あなたは、モデルのユーザーを混同しないように細心の注意を払う必要があります。コードは、あなたがnullの周りに渡し、それをチェックするのを忘れた場合すぐに爆破する傾向があるが、「nullオブジェクトは、」簡単に深いコールスタックに生き残るためには、それが本当の目的ではないので、微妙な問題を引き起こす可能性があります。

直接的な応答におうかがいかにヒント:

  • 使ってみ Nullオブジェクト
  • それだけではないよう適切なの階層をここまで(ごはんのレベル)のなかには何らかの方法第一/第二レベルに達していることの回答のう

一般的に、あなたのオブジェクト階層内のNULLだったが、それに対してテストしない性質気にしない場合。 (これはアプリケーションのASP.NET、リサイズ、...の種類に依存します)アプリケーションのためのグローバルエラーハンドラを使用して、ユーザー何かが間違っていたと言っています。

私は強くあなたが以下のポストに見えることをお勧めしたいです。 http://www.hardcodet.net/2008/ 12 /観察-依存関係スルーラムダ式の-part1をする

これは、同様の問題を意味し、また、あなたが簡単に変更を処理することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top