【发布时间】:2019-11-26 18:16:49
【问题描述】:
我正在编写一个 Xamarin.Android 应用程序并在那里使用 JSON API,当它在数据库中找不到对象时,它只是为数据字段返回一个空字符串。不是一个好的设计,但我无法改变它。为了检查这种可能性,我编写了这个简短的函数,我将它绑定到包含 JsonObject 的 LanguageExt.Either 对象,并且当数据为空时返回一个左值。
private Either<Exception, T> CheckData<T>(T json) where T : JsonObject
{
if (json.Data == null)
{
return Left<Exception, T>(new KeyNotFoundException());
}
else
{
return Right(json);
}
}
问题是,它总是返回一个左值。尝试将条件更改为 json.Data.Equals(null) 会引发 NullPointerException。到目前为止,我猜我实际上在那里有空值,但是当我在调试器中单步执行程序时,它肯定是填充的而不是空的,即使我在 if 行添加了一个断点。老实说,我实在是束手无策,一个对象怎么可能是空的,但在调试器中却不是空的?
【问题讨论】:
-
"即使对象存在,对象仍为空" -- 不,这不是真的。要么引用为空且不存在对象,要么存在对象且引用不为空。我希望每次有人声称现实与调试器告诉他们的不同时,我都能得到一分钱。当你认为调试器对你撒谎时,那只是因为你误解了你所看到的。不幸的是,您的问题缺乏任何有助于解释您如何出错的细节。因此,在改进之前,我们能做的最好的就是提供规范的“空异常”答案。
-
我的意思是,你可以看一下截图,你可以看到调试器肯定显示引用不为空,但它进入了 if 子句,我是否应该用调用代码再次提问?
-
只是好奇,你能试试
if (json?.Data == null),看看会发生什么? -
和以前一样
-
if (json?.Data != null)怎么样
标签: c# xamarin.android visual-studio-debugging language-ext