服务器堆栈跟踪:
在 Tavisca.TravelNxt.Hotel.Core.Controllers.HotelSuppliersController.b__33(PassengerTypeQuantity passengerInfo)
at System.Linq.Enumerable.Any [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;
}
答案 0 :(得分: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 :(得分:2)
由于错误在linq中,这意味着问题正在线上发生
if (passengers.Any(passengerInfo => passengerInfo.Quantity == 0))
这是因为passengers
中的一个或多个元素为空,因此passengerInfo.Quantity
部分导致对象未设置为实例异常。
尝试将该行更改为以下内容以查看它是否解决了错误:
if (passengers.Any(passengerInfo => passengerInfo == null || passengerInfo.Quantity == 0))
(虽然当然,这种改变实际上可能掩盖了你有一个空乘客信息对象的真正问题)
答案 2 :(得分: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.
例外,因为我们实际上现在知道filip
是null
。
那么我们如何解决这个问题呢?
我们可以在打印之前检查它是否为null
:
Person filip = null;
if(filip != null)
{
Console.WriteLine(filip.Name);
}
或者,如果我们从另一个metod获取Person
,我们可以使用??
来确保它不为null,如果是,我们只需创建一个新的这样的:
Person filip = GetFilip() ?? new Person();
这完全取决于你的应用程序中为null时想要做什么。
正如其他人提到的那样,你需要设置一个断点并找到发生错误的 where ,当你发现错误时,查找哪个对象是null并确保它处理得当。< / p>
您的堆栈跟踪中有很好的信息可以引导我们进入LINQ语句。
在您的情况下,您检查if (passengers == null || passengers.Count == 0)
但是在下一行if (passengers.Any....)
这意味着即使passengers
为空,它仍会尝试Any()
开启它将引发异常。
也许您只是在寻找else if
?
答案 3 :(得分: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;
}