C# 即使对象存在并且在调试器中显示为空,对象也为空

C# 即使对象存在并且在调试器中显示为空,对象也为空,c#,xamarin.android,visual-studio-debugging,language-ext,C#,Xamarin.android,Visual Studio Debugging,Language Ext,我正在编写一个Xamarin.Android应用程序,并在那里使用一个JSON API,当在数据库中找不到对象时,它只会为数据字段返回一个空字符串。不是一个好的设计,但我不能改变它。为了检查这种可能性,我编写了这个短函数,将其绑定到LanguageExt.orb对象,该对象包含JsonObject,并且在数据为null时返回一个左值 private或CheckData(T json),其中T:JsonObject { if(json.Data==null) { 返回左(newkeynotfoun

我正在编写一个Xamarin.Android应用程序,并在那里使用一个JSON API,当在数据库中找不到对象时,它只会为数据字段返回一个空字符串。不是一个好的设计,但我不能改变它。为了检查这种可能性,我编写了这个短函数,将其绑定到LanguageExt.orb对象,该对象包含JsonObject,并且在数据为null时返回一个左值

private或CheckData(T json),其中T:JsonObject
{
if(json.Data==null)
{
返回左(newkeynotfoundexception());
}
其他的
{
返回权(json);
}
}
问题是,它总是返回一个左值。尝试将条件更改为
json.Data.Equals(null)
会引发NullPointerException。到目前为止,我想我实际上在那里有空值,但是当我在调试器中单步执行程序时,它肯定已填充且不为空,即使我在if行添加断点也是如此。老实说,我已经不知所措了,一个对象怎么可能是空的,而在调试器中又不是空的

以下是错误的图像:

使用
==

if(json.Data == null)
{
}

我已经这样做了,它看起来不像是在te屏幕截图中,因为我使用了带有连字的Fira代码字体,但其中的代码与文本中的代码相同,其中是JsonObject?我不认为它是NewtonSoft的一部分。如果(json.Data==null),则执行
操作时,
数据
属性可能未被计算。但是,当您执行“快速观察”时,VisualStudio将评估此属性。检查
data
属性的
getter
是否有延迟加载。这是我的猜测:)“即使对象存在,对象也是空的”——不,那不是真的。要么引用为null,没有对象,要么有对象,引用不为null。我希望每次有人声称现实与调试器告诉他们的不一样时,我都能得到一分钱。当你认为调试器在欺骗你时,那只是因为你误解了你所看到的。不幸的是,你的问题缺乏任何细节来解释你是如何出错的。因此,在改进之前,我们所能做的就是提供规范的“null异常”答案。我的意思是,你可以查看屏幕截图,你可以看到调试器明确显示引用不是null,但它进入了if子句,我应该用调用代码再次问这个问题吗?只是好奇,你能尝试
if吗(json?.Data==null)
,看看会发生什么?与以前发生的情况相同如果(json?.Data!=null)