2011-07-03 12 views
9

私はC#で新しいです。 C#では構造体の値をnullに設定できませんnull値をサポートする構造体を作成するにはどうすればよいですか?null値をサポートする構造体を作成するにはどうすればよいですか?

+3

最初は構造体を使用するべきではありません。 – SLaks

+0

代わりに、これをクラスとして定義することはできない魅力的な理由はありますか? – juharr

答えて

14

構造体と値の種類は、それをラップするために、汎用のNullable <>クラスを使用して、NULL値可能行うことができます。例えば:

Nullable<int> num1 = null; 

C#は型の後に疑問符を追加することで、このための言語機能を提供します。

int? num1 = null; 

同じことが、構造体を含む任意の値タイプのために働く必要があります。

MSDNの説明:Nullable Types (c#)

3

あなたは構造体用Nullable<T>、または速記フォームを使用することができ、同一の(?):

は、その基礎となる タイプも が参照型のようなヌル割り当て可能な値型であるオブジェクトを表し。

struct Foo 
{ 
} 

Nullable<Foo> foo2 = null; 
Foo? foo = null; //equivalent shorthand form 
5

あなたは、C#での別名を持つNullable<T>を使用することができます。構造体自体は実際にはnullではないことに留意してください(コンパイラはヌルを別々に扱います)。それはOption typeの詳細です。

Struct? value = null; 

として@CodeInChaosは、非ヌル状態にあるときNullable<T>のみ箱詰めさ言及しています。

Nullable Types

Boxing Nullable Types

+2

'Nullable 'は単にcompilermagicではありません。これはCLRの魔法によってもサポートされています。たとえば、 'null'のヌル入力可能なボックスを実際のヌルに置き換えます。 – CodesInChaos

2

「構造体」は、参照型ではないので、あなたが通常の方法として「ヌル」を割り当てることができません。そのため、次の形式を使用して「nullable」にする必要があります。

[構造名]? [変数名] = null

例:

Color? color = null; 

この場合、オブジェクトにnullを割り当て、条件文を使用してNULL可能性をチェックすることもできます。

関連する問題