0

値型が null 可能であると宣言されている場合、どのように予防策を講じるべきですか? つまり、コンストラクターに次のものがある場合:

public Point3 ( Point3 source )
{
    this.X = source.X;
    this.Y = source.Y;
    this.Z = source.Z;
}

ソースがnullの場合、失敗しますか?

4

5 に答える 5

10

値型ならありえる可能性Point3が見えない。nullクエスチョンマークを見逃していませんか?本当に意味がある場合はPoint3?、次のようにアクセスする必要があります。

public Point3 ( Point3? source )
{
    this.X = source.Value.X;
    this.Y = source.Value.Y;
    this.Z = source.Value.Z;
}

この場合、Valueプロパティが の場合、プロパティは例外をスローしますnull

于 2009-06-01T20:26:38.203 に答える
3

このメソッドの呼び出し元は、null 許容ポイントではなく通常のポイントを取るため、null 許容ポイントを渡すことができません。したがって、コンストラクター コードで Point が null であることを心配する必要はありません。

于 2009-06-01T20:28:30.913 に答える
2

sourceはい、 null の場合は失敗します。

sourceが nullの場合の正しい動作を決定する必要があります。例外をスローするだけかもしれません。

public Point3 ( Point3? source )
{
    if (source == null) 
    {
        throw new ArgumentNullException("source");
    }

    this.X = source.Value.X;
    this.Y = source.Value.Y;
    this.Z = source.Value.Z;
}

nullまたは、 の値を受け入れたくない場合sourceは、例にあるようにメソッドをそのままにしてください。そのメソッドは を受け入れないNullable<Point3>ので、その場合であることを心配する必要はありませんnull

于 2009-06-01T20:28:06.670 に答える
1

である場合sourcePoint3?それは ではありませんPoint3。私の知る限り、コンパイル時に失敗します。を送信するには、Point3?を使用する必要があり.Valueます。これは、null の場合は例外をスローすると思います。

于 2009-06-01T20:29:25.110 に答える
1
    public Point3(Point3? source) { 
       this.X = source.GetValueOrDefault().X; 
        this.Y = source.GetValueOrDefault().Y;
        this.Z = source.GetValueOrDefault().Z; 
    }
于 2009-06-01T20:54:59.613 に答える