检查对象是否已实例化

时间:2013-02-01 14:40:46

标签: c# .net instantiation

我有一个由许多其他物体组成的物体!我试图找到其中一个属性(枚举)的值,但不能。

现在,通常如果我想检查一个对象是否为null我可以做

if (object == null) 

但这会导致同样的错误。

我试过

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

我得到的错误消息是objectName抛出异常:System.NullReferenceException:对象引用未设置为对象的实例..

我正在尝试确定我的对象是否已实例化。现在,我可以坚持尝试捕捉,如果错误然后我知道它不是,但对我来说这感觉非常错误(虽然我可能没有选择)。

我遇到的另一个问题是这个项目不是我的,对每个人都是一个黑盒子,因此我不能对原始对象进行任何更改!这意味着,我拥有的只是我所拥有的,一个可能会或可能不会被实例化的对象,我需要一种方式来表达。

除了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.

2 个答案:

答案 0 :(得分:6)

if (saveBundleResponse != null)
{
    var header = saveBundleResponse.Header;
    if (header != null)
    {
        var status = header.Status;
    }
}

答案 1 :(得分:3)

你应该能够使用这样的东西:

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

这应该有效(如果该类不是控件,则不能使用IsDisposed检查)。