値型が null 可能であると宣言されている場合、どのように予防策を講じるべきですか? つまり、コンストラクターに次のものがある場合:
public Point3 ( Point3 source )
{
this.X = source.X;
this.Y = source.Y;
this.Z = source.Z;
}
ソースがnullの場合、失敗しますか?
値型が null 可能であると宣言されている場合、どのように予防策を講じるべきですか? つまり、コンストラクターに次のものがある場合:
public Point3 ( Point3 source )
{
this.X = source.X;
this.Y = source.Y;
this.Z = source.Z;
}
ソースがnullの場合、失敗しますか?
値型ならありえる可能性Point3
が見えない。null
クエスチョンマークを見逃していませんか?本当に意味がある場合はPoint3?
、次のようにアクセスする必要があります。
public Point3 ( Point3? source )
{
this.X = source.Value.X;
this.Y = source.Value.Y;
this.Z = source.Value.Z;
}
この場合、Value
プロパティが の場合、プロパティは例外をスローしますnull
。
このメソッドの呼び出し元は、null 許容ポイントではなく通常のポイントを取るため、null 許容ポイントを渡すことができません。したがって、コンストラクター コードで Point が null であることを心配する必要はありません。
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
。
である場合source
、Point3?
それは ではありませんPoint3
。私の知る限り、コンパイル時に失敗します。を送信するには、Point3?
を使用する必要があり.Value
ます。これは、null の場合は例外をスローすると思います。
public Point3(Point3? source) {
this.X = source.GetValueOrDefault().X;
this.Y = source.GetValueOrDefault().Y;
this.Z = source.GetValueOrDefault().Z;
}