2013-12-13 32 views
-2

服务器堆栈跟踪:获取对象引用未设置为对象的实例。例外

at Tavisca.TravelNxt.Hotel.Core.Controllers.HotelSuppliersController.b__33(PassengerTypeQuantity passengerInfo)

at System.Linq.Enumerable.Any[TSource](IEnumerable 1 source, Func 2 predicate)

代码:

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; 
} 
+0

其实我想肯定的是,由于是我得到的错误 –

+0

我得到错误的LINQ –

+2

任何乘客是否有任何的乘客的对象'在列表中null'? –

回答

2

由于误差是在LINQ,这意味着存在的问题是发生在线路

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

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

尝试改变线以下,看它是否解决了错误:

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

(当然,这种变化可能在现实中是具有空passengerInfo对象掩盖你真正的问题)

+1

@Pravin:它解决了你的问题吗? – preetam

+1

他说,'passengerInfo'都不是'null'。 – preetam

+1

@preetam我建议他在这个说法中错了(或者说问题在于提供的代码之外) –

1

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.例外,因为我们其实现在知道filipnull

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

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

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

或者,如果我们从另一个梅托德得到Person,我们可以使用??,以确保它不为空,如果是,我们只需要创建一个新的一个是这样的:

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

这一切都取决于你想要在你的应用程序空的情况下该怎么办。

正如其他人所说,你需要设置一个断点,并找到其中错误是存在的,当你发现,找什么对象为空,并确保它被妥善处理。

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

在你的情况,你检查if (passengers == null || passengers.Count == 0)但在下一行你有if (passengers.Any....)这意味着即使passengers为空时,它仍然会尝试Any()就可以了,这将抛出一个异常。

也许您只是在寻找else if

4

请试试这个

 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; 
     } 
+1

与@David Arno发布的内容不一样吗? –

1

的解决方案是检查所有。

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; 
} 
+0

这个解决方案正是我所建议的。您应该将我建议的解决方案标记为“答案”。 –

相关问题