2009-06-01 21 views
0

値の型がnullableと宣言されている場合、これにはどのように注意する必要がありますか?私。コンストラクタ内にある場合:null可能な値の型

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

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

答えて

10

Point3は値型の場合nullの可能性はありません。あなたは疑問符を見逃しませんか?そして、あなたは本当にPoint3?を意味するならば、あなたは好きそれにアクセスする必要があります

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

と、それはnullだこの場合には、Valueプロパティは例外をスローします。

+0

申し訳ありません申し訳ありませんが、型はnullableとして記述する必要があります。私はどのような値の型もそのように宣言できると思いました。 –

+0

いいえ、値の型をnullにすることはできません。 Nullable型は、値の型のこのギャップを埋めるために.NET 2.0に追加された機能でした。ヌルとして設定するには、null可能な変数を明示的に使用する必要があります。 –

+0

ありがとうございます。だから、上記のようにPoint3をnullableとして宣言する能力をユーザーに与えるために、コンストラクタを用意する必要があります。 null値のコンストラクタと値型の正規のコンストラクタの両方を含めることはできますか? –

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; 
} 

それとも、あなたはsourceためnull値を受け入れたくない場合は、あなたの例では、それを持っているように、単に方法を保ちます。その方法ではNullable<Point3>を受け入れないので、その場合はnullであることを心配する必要はありません。

+0

nullable にはプロパティX、Y、Zがありません...キャストまたはValueプロパティを使用する必要があります。 –

+0

固定、ありがとうございます。 – bdukes

3

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

1

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

1
public Point3(Point3? source) { 
     this.X = source.GetValueOrDefault().X; 
     this.Y = source.GetValueOrDefault().Y; 
     this.Z = source.GetValueOrDefault().Z; 
    } 
関連する問題