web-dev-qa-db-ja.com

定義により「構造体」をヌル可能にする方法は?

struct AccountInfo
{
   String Username;
   String Password;
}

Nullableインスタンスが必要な場合は、次のように記述します。

Nullable<AccountInfo> myAccount = null;

しかし、私は本質的にstructNullableを作成し、このように使用できます(Nullable<T>):

AccountInfo myAccount = null;
47
Xaqron

できません。構造体は値の型と見なされ、定義上、nullにすることはできません。 nullableにする最も簡単な方法は、参照型にすることです。

自問する必要がある答えは、「なぜこれが構造体なのか?」です。そして、あなたが本当に堅実な理由を考えることができない限り、しないで、それをクラスにします。構造体がスタック上に作成されるとは限らないため(これに依存するべきではない)、構造体が「高速」であるという議論は本当に誇張されており、「獲得される」速度はケースごとに異なります。

クラスと構造体の議論と速度に関するEric Lippertの post を参照してください。

52
kemiller2002

宣言するときは、「?」で宣言します。好めば

AccountInfo? myAccount = null;
44
Dlongnecker

簡単な答え:クラスにします。

長い答え:この構造体は可変であり、構造体は決してあるべきではなく、構造体が常にすべき単一の値を表しておらず、構造体も常にすべき賢明な「ゼロ」値を持たないので、おそらく値型ではないはずです。クラス(参照型)にすると、常にnullになる可能性があります。


注:「never」や「always」などの単語の使用は、暗黙の「ほぼ」を使用して行う必要があります。

17
Greg Beech