値の型がnullableと宣言されている場合、これにはどのように注意する必要がありますか?私。コンストラクタ内にある場合:null可能な値の型
public Point3 (Point3 source)
{
this.X = source.X;
this.Y = source.Y;
this.Z = source.Z;
}
ソースがnullの場合は失敗しますか?
値の型がnullableと宣言されている場合、これにはどのように注意する必要がありますか?私。コンストラクタ内にある場合: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;
}
と、それはnull
だこの場合には、Value
プロパティは例外をスローします。
はい、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;
}
それとも、あなたはsource
ためnull
値を受け入れたくない場合は、あなたの例では、それを持っているように、単に方法を保ちます。その方法ではNullable<Point3>
を受け入れないので、その場合はnull
であることを心配する必要はありません。
nullable
固定、ありがとうございます。 – bdukes
このメソッドの呼び出し元は、Nullableではなく通常のポイントをとるため、nullableポイントを渡すことはできません。したがって、コンストラクタコードでPointが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;
}
申し訳ありません申し訳ありませんが、型はnullableとして記述する必要があります。私はどのような値の型もそのように宣言できると思いました。 –
いいえ、値の型をnullにすることはできません。 Nullable型は、値の型のこのギャップを埋めるために.NET 2.0に追加された機能でした。ヌルとして設定するには、null可能な変数を明示的に使用する必要があります。 –
ありがとうございます。だから、上記のようにPoint3をnullableとして宣言する能力をユーザーに与えるために、コンストラクタを用意する必要があります。 null値のコンストラクタと値型の正規のコンストラクタの両方を含めることはできますか? –