检查对象的Null值

时间:2012-07-18 10:42:37

标签: c#-4.0

我的代码如下:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Address address { get; set; }

    public Person GetFullName()
    {
        return new Person { };
    }
}

public class Address
{
    public int Name { get; set; }
}

我需要检查Person是否为空以及它包含的地址。为此,下面的代码有效:

 class Program
    {

        static void Main(string[] args)
        {

            Person person = new Person();
            person.FirstName="bla";
            if (person != null && person.address != null)
            {
                Console.WriteLine(person.address.Name);
            }


        }
    }

问题我:

此代码如何作为person执行。地址应该抛出Null Exception?

if (person != null && person.address != null)

2 个答案:

答案 0 :(得分:3)

你的代码非常好

if (person != null && person.address != null)

person为空时起作用,因为C#在遇到计算结果为false的语句时终止对表达式中语句的求值。

您的代码与以下内容相同:

if (person != null)
{
    if (person.address != null)
    {
        // do stuff
    }
}

其他语言(Ada)不一样。在那里,表达式被评估的顺序要么不是由操作的“成本”确定或确定的。如果您想强制执行评估顺序,则必须使用and then(或or else)结构:

if (person != null and then person.address != null)

它使代码更清晰,但这就是它的全部内容。

答案 1 :(得分:1)

检查无效的正确方法是if(person != null)。如果您执行if(!person.Equals(null)),那么您将获得NullReferenceException if person == null。这是一种滑稽的,因为首先避免这种例外是目标。

您的代码会执行,因为如果person != null为真,则它会开始查看下一个person.address != null语句。如果第一个语句返回false,它甚至不会查看下一个语句因为&&操作

编辑:您也可能想知道person.address.Name永远不会为空,因为这是一个整数。默认情况下,它的值= 0而不是null。当然,这仅适用于类成员字段,因为必须在使用前为本地方法级字段显式赋值。