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がnullでないかどうか、およびそれに含まれるアドレスを確認する必要があります。このため、以下のコードが機能します。

 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.Addressとしてどのように実行されますか?Null例外をスローする必要がありますか?

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

2 に答える 2

3

あなたのコードは完全に素晴らしいです

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

personC#は、falseと評価されるステートメントに遭遇するとすぐに、式内のステートメントの評価を終了するため、がnullの場合に機能します。

コードは次のようになります。

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

他の言語(Ada)は同じではありません。そこでは、式が評価される順序は、操作の「コスト」によって決定されないか、決定されます。そこで、評価の順序を強制したい場合は、and then(またはor else)構文を使用する必要があります。

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

それはコードをより明確にします、しかしそれはそれがそれのために行っているすべてについてです。

于 2012-07-18T10:55:45.707 に答える
1

nullをチェックする正しい方法はif(person != null)です。if(!person.Equals(null))そうすると、NullReferenceExceptionが発生しますif person == null。そもそもこの例外を回避することが目標だったので、これは一種のコミカルです。

person != nullがtrueの場合にのみ、次のステートメントの検索を開始するため、コードが実行されperson.address != nullます。最初のステートメントがfalseを返す場合、&&演算子があるため、次のステートメントも参照されません。

person.address.Name編集:これは整数であるため、これがnullになることはないことも知りたい場合があります。デフォルトでは、nullではなく値=0です。もちろん、これはクラスメンバーフィールドにのみ適用されます。ローカルメソッドレベルのフィールドには、使用する前に値を明示的に割り当てる必要があるためです。

于 2012-07-18T10:49:49.663 に答える