Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC使用值可能为空或不为空的值的正确方法?_C#_Asp.net Mvc_Nullreferenceexception - Fatal编程技术网

C# ASP.NET MVC使用值可能为空或不为空的值的正确方法?

C# ASP.NET MVC使用值可能为空或不为空的值的正确方法?,c#,asp.net-mvc,nullreferenceexception,C#,Asp.net Mvc,Nullreferenceexception,使用值可能为空或不为空的值的正确方法是什么 我有一段代码,如果提出休假请求的员工有经理,它会向经理发送电子邮件 if(holidayRequestForm.Employee.Site.SiteManagerEmail != null) { SendMailToManager(); } 但是,这会导致NullReferenceException 如果某个员工有一个SendMailToManager而不会导致NullRef

使用值可能为空或不为空的值的正确方法是什么

我有一段代码,如果提出休假请求的员工有经理,它会向经理发送电子邮件

 if(holidayRequestForm.Employee.Site.SiteManagerEmail != null)
            { 
            SendMailToManager();
            }
但是,这会导致NullReferenceException

如果某个员工有一个SendMailToManager而不会导致NullReferenceException,那么实现调用该SendMailToManager的正确方法是什么


以这种方式使用可能的空值是一种不好的做法吗?

看看空条件运算符?。为了了解如何重写if语句以避免NullReference异常,请参阅

if(holdayRequestForm?.Employee?.Site?.SiteManagerEmail != null)
{
    SendMailToManager();
}

我不觉得这是一个坏习惯。我认为在所描述的情况下,您没有任何其他可能性。

看看空条件运算符?。为了了解如何重写if语句以避免NullReference异常,请参阅

if(holdayRequestForm?.Employee?.Site?.SiteManagerEmail != null)
{
    SendMailToManager();
}

我不觉得这是一个坏习惯。我认为在上述情况下您没有任何其他可能性。

您在这里假设holidayRequestForm、Employee和Site都存在。空引用异常将是因为其中一个属性为空,而不是最后一个属性。@CraigH我已经确认所有员工都必须分配一个站点,这样可以避免他们为空。ASP.NET MVC与此问题有何关系?看起来这些变量或属性中的任何一个都可能为null并导致NRE。进行验证并不意味着属性已填充。可能EF查询忘记加载相关实体。可能在加载时没有分配属性,或者可能是某些东西将它们显式设置为null。您应该检查异常的调用堆栈。现在我们不知道异常是由某个属性还是SendMailToManager引发的。重复的问题显示了如何调试这些问题。@PanagiotisKanavos这是我使用的框架,我认为模型可能很重要。你能解释一下为什么验证并不意味着属性被填充吗?你在这里假设holidayRequestForm、Employee和Site都存在。空引用异常将是因为其中一个属性为空,而不是最后一个属性。@CraigH我已经确认所有员工都必须分配一个站点,这样可以避免他们为空。ASP.NET MVC与此问题有何关系?看起来这些变量或属性中的任何一个都可能为null并导致NRE。进行验证并不意味着属性已填充。可能EF查询忘记加载相关实体。可能在加载时没有分配属性,或者可能是某些东西将它们显式设置为null。您应该检查异常的调用堆栈。现在我们不知道异常是由某个属性还是SendMailToManager引发的。重复的问题显示了如何调试这些问题。@PanagiotisKanavos这是我使用的框架,我认为模型可能很重要。你能解释一下为什么验证并不意味着属性被填充吗?最好知道,C8.0通过引入可为空的引用类型帮助避免了这类问题。更多信息:@johey这不会阻止外部空值。在这种情况下,看起来数据是从数据库加载的。在这种情况下仍然需要空检查。最好知道,C8.0通过引入可空引用类型帮助避免了此类问题。更多信息:@johey这不会阻止外部空值。在这种情况下,看起来数据是从数据库加载的。在这种情况下仍然需要空检查。