繁体   English   中英

'你调用的对象是空的。' 在C#linq to SQL中

[英]'Object reference not set to an instance of an object.' in C# linq to SQL

这是显示错误的代码行

var physician = (from userAccounts in myDb.Physicians
                            where userAccounts.Phy_UserName == txtUserName.Text
                            select userAccounts).FirstOrDefault();

            setFirstName(physician.Phy_FName);

但是在我的二传手中,我有一个前提条件,如果它是一个空值,它将什么都不会做,但是它怎么会继续出现该错误呢? 这是我的设置员代码

public void setFirstName(string fName) {
            if (fName == null)
            {
            }
            else {
                firstName = fName;
            }
        }

我猜您的医师查询返回null

然后,您尝试使用null值调用属性Phy_FName

在这种情况下,在setFirstName方法中检查null值将不会保护您,因为Phy_FName不是null ,而是physician

顺便说一句,你可能还需要检查fName是不是在你的空字符串setFirstName方法。 您可以使用if (!String.IsNullOrEmpty(fName))来检查这两种情况

尝试这个:

var physician = (from userAccounts in myDb.Physicians
                            where userAccounts.Phy_UserName == txtUserName.Text
                            select userAccounts).FirstOrDefault();

if(physician != null)
{
  setFirstName(physician.Phy_FName);
}
else
{
  //Throw Error or any any other processing as needed.
}

我敢打赌physician是空的。 您确定从查询中得到任何回报吗?

Phy_FName属性将以任何一种方式进行评估,因此在尝试读取其属性之前,请确保physician不为空。

在使用前,您需要检查physician的价值:

if (physician != null)
    setFirstName(physician.Phy_FName);

为了澄清我自己的错误假设,也许您也在考虑:

如果存在,则FirstOrDefault将返回默认值,但是对象的默认值为null 因此,您的Linq查询很可能返回医师的空值。 然后,您尝试其中的一个访问Phy_FName。

这是一个SO问题,可以更深入地阐明这一点: 为引用类型指定默认值

暂无
暂无

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

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