12

私は他の多くのオブジェクトでできているオブジェクトを持っています! プロパティ (列挙型) の 1 つの値を見つけようとしていますが、できません。

さて、通常、オブジェクトが null かどうかを確認したい場合は、次のことができます

if (object == null) 

しかし、これは同じエラーになります。

私は試した

if (object.Equals(null)) and the same error.

私が得ているエラーメッセージは、objectName throwed exception: System.NullReferenceException: Object reference not set to an instance of an object. です。

オブジェクトがインスタンス化されているかどうかを判断しようとしています。ここで、これを try catch に貼り付けることができます。エラーが発生した場合は、そうではないことがわかりますが、私にはこれが非常に間違っていると感じています (選択の余地はないかもしれませんが)。

私が抱えているもう1つの問題は、このプロジェクトは私のものではなく、誰にとってもブラックボックスであるため、元のオブジェクトに変更を加えることはできません! つまり、私が持っているのは私が持っているものだけであり、インスタンス化されているかどうかわからないオブジェクトであり、伝える方法が必要です。

try catch 以外のオプションはありますか?

編集

というわけで、オブジェクトは

public partial class SaveBundleResponse 
{
    SaveBundleResponseHeader header;
}

public partial class SaveBundleResponseHeader 
{      
        private SaveBundleResponseHeaderStatus status;
}

public enum SaveBundleResponseHeaderStatus 
{        
        Success, Fail, OK, OtherStates
}

そのため、最初に SaveBundleResponse が作成され、インスタンスは「ワークフロー」スタイルの環境を通過し、各プロパティはワークフローに深く入るにつれて「入力/更新」されます。ただし、状況によっては、列挙型が設定されないことがあります。

問題は、列挙型の値 (またはそれが null かどうか) を知る必要があることです。

私が使用しようとしているコードは

        if (saveBundleResponse.Header.Status // what ever happens, it fails at this point as Status is not initiated.
4

2 に答える 2

9
if (saveBundleResponse != null)
{
    var header = saveBundleResponse.Header;
    if (header != null)
    {
        var status = header.Status;
    }
}
于 2013-02-01T14:56:13.307 に答える
4

次のようなものを使用できるはずです。

SaveBundleResponse sbr = ...;
if (sbr.Header != null && !sbr.IsDisposed)
{
    //Do the work
}

これは機能するはずです (クラスがコントロールでない場合は、IsDisposed チェックを使用できません)。

于 2013-02-01T14:51:50.793 に答える