我有一个由许多其他物体组成的物体!我试图找到其中一个属性(枚举)的值,但不能。
现在,通常如果我想检查一个对象是否为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.
答案 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检查)。