繁体   English   中英

返回非null值的方法仍然为变量赋值null

[英]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。

以下是我的调试会话的一些屏幕截图:

方法结束 即时窗口显示框仍为空

您在调试器中显示的错误并不意味着该boxnull 如果boxnull ,它只会报告: null

相反,该box是非null ,调试器正在评估显示该值的内容是抛出异常。 也许是一个破碎的ToString() 它提到ListDictionaryInternal的事实意味着您可能希望特别关注类型内的任何集合或字典用法,以及可能标记有“调试器”属性的任何内容,例如[DebuggerDisplay(...)]

如果要测试box是否为null ,请询问即时控制台:

box == null

并且它将返回truefalse (警告:假设没有破坏的静态相等运算符,这也是可能的;为了避免这种情况,一个很好的选择是:

box is object

这将可靠地返回true ,如果它是非null ,并且false如果是null ,不使用静态相等运算符。


编辑:基于评论中的讨论,我绝对相信这是一个破坏的==运算符,如下所示:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM