正在获取未设置为对象实例的Object引用.例外

本文关键字:实例 Object 引用 例外 对象 获取 设置 | 更新日期: 2024-09-20 17:18:57

服务器堆栈跟踪:

在塔维斯卡。TravelNxt。酒店果心控制器。酒店供应商控制器.b_33(乘客类型数量passengerInfo)

在系统中。林克。可枚举。任何[TSource](IEnumerable 1 source, Func 2谓词)

代码:

if (passengers == null || passengers.Count == 0)
{
    _serviceStatus.MissingItems.Add(Utility.GetXmlElementORAttributeName(type, property));
    return false;
}
if (passengers.Any(passengerInfo => passengerInfo.Quantity == 0))
{
    _serviceStatus.InvalidItems.Add(Utility.GetXmlElementORAttributeName(type, property));
    return false;
}

正在获取未设置为对象实例的Object引用.例外

请尝试此

        if (passengers == null || (passengers != null && passengers.Count == 0))
        {
            _serviceStatus.MissingItems.Add(Utility.GetXmlElementORAttributeName(type, property));
            return false;
        }
        if (passengers.Any(passengerInfo => (passengerInfo == null) || (passengerInfo != null && passengerInfo.Quantity == 0)))
        {
            _serviceStatus.InvalidItems.Add(Utility.GetXmlElementORAttributeName(type, property));
            return false;
        }

由于错误在linq中,这意味着问题发生在线上

if (passengers.Any(passengerInfo => passengerInfo.Quantity == 0))

这是因为passengers中的一个或多个元素为null,因此passengerInfo.Quantity部分导致对象未设置为实例异常。

尝试将行更改为以下内容,看看它是否解决了错误:

if (passengers.Any(passengerInfo => passengerInfo == null || passengerInfo.Quantity == 0))

(当然,这个变化实际上可能掩盖了passengerInfo对象为空的真正问题)

Object reference not set to an instance of an object.表示您有一个对象是null,因此它没有实例化。您可以通过确保对象实际上是实例化的来解决这个问题。

有多种方法可以做到这一点,这完全取决于您希望应用程序在出现意外行为(null!)时做什么。

空对象的示例

如果你要写以下内容:

Person filip = null;
Console.WriteLine(filip.Name);

然后第二行会给我们一个Object reference not set to an instance of an object.异常,因为事实上我们现在知道filip就是null

那么我们该如何解决这个问题呢?

要么我们可以在打印之前检查它是否是null

Person filip = null;
if(filip != null)
{
    Console.WriteLine(filip.Name);
}

或者,如果我们从另一个方法获得Person,我们可以使用??来确保它不是空的,如果是空的,我们只创建一个新的,如下所示:

Person filip = GetFilip() ?? new Person();

这完全取决于在应用程序中出现null的情况下要做什么。

正如其他人所提到的,您需要设置一个断点,并找到错误发生的位置,当您发现错误时,请查找哪个对象为null,并确保它得到了正确处理。

您的堆栈跟踪中有很好的信息,可以引导我们使用LINQ语句。

在您的情况下,您检查了if (passengers == null || passengers.Count == 0),但在下一行您有if (passengers.Any....),这意味着即使passengers为null,它仍然会尝试在其上调用Any(),这将引发异常。

也许你只是在找else if

解决方案是对所有人进行检查。

if (passengers == null || (passengers != null && passengers.Count == 0))
{
     _serviceStatus.MissingItems.Add(Utility.GetXmlElementORAttributeName(type, property));
     return false;
}
if (passengers.Any(passengerInfo => (passengerInfo == null) || (passengerInfo != null && passengerInfo.Quantity == 0)))
{
    _serviceStatus.InvalidItems.Add(Utility.GetXmlElementORAttributeName(type, property));
    return false;
}