[英]Method returning a non-null value still assigns null to a variable
我有一个方法可以根据字段在我的数据库中搜索某些内容。 当调用该方法并将返回值保存在变量中时,返回值在函数末尾不为null。 在调用函数并调试变量中可用的函数后,该值仍为null!
我有一节课:
var box = _someClass.GetBoxByRfidAsync("testvalue");
public Box GetBoxByRfidAsync(string rfid)
{
var foundBox = _dc.Boxes
.Include(b => b.Stack)
.Include(b => b.Type)
.Where(box => box.RFID1 == rfid)
.FirstOrDefault();
return foundBox;
}
box类看起来像这样:
public class Box
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string RFID1 { get; set; }
public string Rit { get; set; }
public Stack Stack { get; set; }
public int PosInStack { get; set; } //lowest box is 0, highest is 7
public BoxType Type { get; set; }
public DateTime Inserted { get; set; }
}
该方法被执行,在GetBoxByRfidAsync结束时,我可以看到使用调试器,findBox是非null。
我跳过函数的结尾,然后将findBox值赋值给box变量。 由于某种原因,'box'变量保持为null并且不会更改。
box变量应该等于foundBox值,但它保持为null。
以下是我的调试会话的一些屏幕截图:
您在调试器中显示的错误并不意味着该box
为null
。 如果box
为null
,它只会报告: null
。
相反,该box
是非null
,调试器正在评估显示该值的内容是抛出异常。 也许是一个破碎的ToString()
。 它提到ListDictionaryInternal
的事实意味着您可能希望特别关注类型内的任何集合或字典用法,以及可能标记有“调试器”属性的任何内容,例如[DebuggerDisplay(...)]
。
如果要测试box
是否为null
,请询问即时控制台:
box == null
并且它将返回true
或false
(警告:假设没有破坏的静态相等运算符,这也是可能的;为了避免这种情况,一个很好的选择是:
box is object
这将可靠地返回true
,如果它是非null
,并且false
如果是null
,不使用静态相等运算符。
编辑:基于评论中的讨论,我绝对相信这是一个破坏的==
运算符,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.