2017-06-24 128 views
0

我有一个从外部系统获取对象的类。我想验证我的参数是否正确。看起来我的对象不是null,即使我向服务发送了错误的值。基本上我想检查mySalesOrderHeader是否包含有效的订单号。检查对象属性为空

例如,if (mySalesOrderHeader != null) { Do My Stuff}我从系统检索mySalesOrderHeader一次,检查这个条件。在我的if condition[Where {Do My Stuff}]里面,我正在访问它的属性并检查它的存在。

if(string.IsNullOrEmpty(mySalesOrderHeader.OrderNumber)){} 

但是在这里它会抛出一个空引用异常。我如何检查一个属性为空,如果我的父对象没有它的值。

注:我使用C#3.0

+1

可能[什么是NullReferenceException,以及如何修复它?](https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – BACON

+2

你有没有检查过属性获得者是如何构建的?也许这是抛出异常而不是mySalesOrderHeader的getter。 –

回答

2

使用Null-Conditional运算符(C#6功能)。它测试的空执行成员像这样访问之前:

if (string.IsNullOrEmpty(mySalesOrderHeader?.OrderNumber)) 
{ 
} 
+0

谢谢@Akbari。但我正在使用c#3.0。看起来mySalesOrderHeader不为null,但我无法访问mySalesOrderHeader.OrderNumber属性。 – SPKan

3

如果变量mySalesOrderHeader为空,则无法访问它的属性,否则将引发异常。 所以,你应该首先检查mySalesOrderHeader。

if (string.IsNullOrEmpty(mySalesOrderHeader != null ? mySalesOrderHeader.OrderNumber : null)) 
{ 
... 
} 
+0

感谢团。看起来mySalesOrderHeader不为null,但我无法访问mySalesOrderHeader.OrderNumber属性。它抛出一个空引用异常。 – SPKan

+0

@SPKan然后你需要在你的问题中包含该属性的代码。 – mason

1

你可以尝试下面的代码片段。它易于清洁,并会与C#3.0

if (mySalesOrderHeader != null) 
{ 
    // are you sure you're not missing out '!' operator at string null or empty check? 
    if (!string.IsNullOrEmpty(mySalesOrderHeader.OrderNumber)) 
    { 
     // logic if order number has some value 
    } 
} 

工作还只检查父对象一旦其恢复(对我来说,从你的问题似乎是空校验被旁路,由于某种原因。)