Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取对象引用未设置为对象的实例。例外_C# - Fatal编程技术网

C# 获取对象引用未设置为对象的实例。例外

C# 获取对象引用未设置为对象的实例。例外,c#,C#,服务器堆栈跟踪: 在 Tavisca.TravelNxt.Hotel.Core.Controller.HotelSuppliersController.b__!33(PassengerTypeQuantity (乘客信息) 在System.Linq.Enumerable.Any[TSource](IEnumerable1源,Func2 谓词) 代码: 由于错误在linq中,这意味着问题发生在线路上 if (passengers.Any(passengerInfo => passengerI

服务器堆栈跟踪:

在 Tavisca.TravelNxt.Hotel.Core.Controller.HotelSuppliersController.b__!33(PassengerTypeQuantity (乘客信息)

在System.Linq.Enumerable.Any[TSource](IEnumerable
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
,因此它没有实例化。您可以通过确保对象实际上已实例化来解决此问题

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

空对象的示例

如果你要写以下内容:

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