C# 获取对象引用未设置为对象的实例。例外
服务器堆栈跟踪: 在 Tavisca.TravelNxt.Hotel.Core.Controller.HotelSuppliersController.b__!33(PassengerTypeQuantity (乘客信息) 在System.Linq.Enumerable.Any[TSource](IEnumerableC# 获取对象引用未设置为对象的实例。例外,c#,C#,服务器堆栈跟踪: 在 Tavisca.TravelNxt.Hotel.Core.Controller.HotelSuppliersController.b__!33(PassengerTypeQuantity (乘客信息) 在System.Linq.Enumerable.Any[TSource](IEnumerable1源,Func2 谓词) 代码: 由于错误在linq中,这意味着问题发生在线路上 if (passengers.Any(passengerInfo => passengerI
1源,Func
2
谓词)
代码:
由于错误在linq中,这意味着问题发生在线路上
if (passengers.Any(passengerInfo => passengerInfo.Quantity == 0))
这是因为passengers
中的一个或多个元素为null,因此passengerInfo.Quantity
部分导致对象未设置为实例异常
尝试将该行更改为以下内容,以查看是否解决了该错误:
if (passengers.Any(passengerInfo => passengerInfo == null || passengerInfo.Quantity == 0))
(当然,这种更改实际上可能掩盖了passengerInfo对象为空的真正问题)
对象引用未设置为对象的实例。
表示您有一个对象为null
,因此它没有实例化。您可以通过确保对象实际上已实例化来解决此问题
有多种方法可以做到这一点,这完全取决于您希望应用程序在出现意外行为(anull
!)时做什么
空对象的示例
如果你要写以下内容:
Person filip = null;
Console.WriteLine(filip.Name);
然后第二行将为我们提供一个未设置为对象实例的对象引用。
异常,因为我们现在实际上知道filip
为null
那么我们如何解决这个问题呢
在打印之前,我们可以检查它是否为null
:
Person filip = null;
if(filip != null)
{
Console.WriteLine(filip.Name);
}
或者,如果我们从另一个metod获取人员
,我们可以使用?
确保其不为空,如果为空,我们只需创建一个新的,如下所示:
Person filip=GetFilip()??新人()代码>
这完全取决于在应用程序中出现null时要做什么
正如其他人所提到的,您需要设置一个断点并找到错误发生的位置,当您找到该断点时,查找哪个对象为null,并确保它得到了正确的处理
堆栈跟踪中有很好的信息,可以引导我们找到LINQ语句
在您的例子中,您检查if(patients==null | | patients.Count==0)
,但在下一行您有if(patients.Any…)
这意味着即使patients
为null,它仍将尝试对其执行Any()
,这将引发异常
也许你只是在寻找一个,如果是?请试试这个
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;
}
解决的办法是检查所有人
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;
}
事实上,我想确定乘客中的任何东西,因为我在LINQA中出错我在LINQA中出错您列表中的任何乘客对象null
?没有乘客对象是null@PravinBakare+1 pravin bhauhe说,passengerInfo
中没有一个是null
@preetam我认为他在这个声明中错了(或者问题不在提供的代码范围内)听起来是正确的…如果不知道问题在哪里,我们就猜不到任何东西?这与@David Arno post不一样吗?这个解决方案正是我建议的。你应该把我建议的解决方案标记为“答案”。
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;
}