2013-12-13 30 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

這個解決方案正是我所建議的。您應該將我建議的解決方案標記爲「答案」。 –

相關問題