2010-12-20 13 views
34
struct AccountInfo 
{ 
    String Username; 
    String Password; 
} 

teraz jeśli chcę mieć Nullable instancji powinienem napisać:Jak z definicji zdefiniować 'struct' Nullable?

Nullable<AccountInfo> myAccount = null; 

Ale chcę zrobić structNullable przez naturę i może być używany tak (bez użycia Nullable<T>):

AccountInfo myAccount = null; 
+9

Czy to klasa? – Shurdoof

+3

Myślałem tylko z dwoma członkami, byłaby to zabawna klasa, wstydziłem się, że ktoś zajrzy do mojego kodu :) – Xaqron

+1

Zmienna struktura jest dużo bardziej problematyczna niż klasa z tylko dwoma członkami. –

Odpowiedz

42

Nie możesz. Struct są uznawane za typy wartości i z definicji nie mogą mieć wartości NULL. Najprostszym sposobem na zrobienie tego jest uczynienie go typem referencyjnym.

Odpowiedź, którą należy zadać sobie, brzmi: "Dlaczego to jest struktura?" i jeśli nie możesz wymyślić naprawdę solidnego powodu, nie rób tego i uczyń z niego klasy. Argument o tym, że struktura jest "szybsza", jest naprawdę przesadzony, ponieważ struktury niekoniecznie są tworzone na stosie (nie powinieneś polegać na tym), a prędkość "zyskiwana" zależy od konkretnego przypadku.

Zobacz artykuł: Ein Lippert: post: dyskusja i prędkość klas, struktur.

14

Krótka odpowiedź: spraw, aby była klasą.

Długa odpowiedź: ta struktura jest zmienna, które nigdy nie powinny być strukturami, nie reprezentuje jednej wartości, którą powinny zawsze mieć konstrukcje, i nie ma sensownej wartości "zero", która zawsze powinna mieć również struktura, więc prawdopodobnie nie powinna być typem wartości. Tworzenie klasy (typu referencyjnego) oznacza, że ​​zawsze jest możliwe, że jest zerowa.


Uwaga: Użycie słów takich jak "nigdy" i "zawsze" należy przyjąć za pomocą domniemanych "prawie".

+1

+1 dla notatki – Dlongnecker

25

Po zadeklarowaniu, zadeklaruj to za pomocą "?" jeśli wolisz

AccountInfo? myAccount = null;

+7

To nie jest "definiowanie" jej. To jest deklaracja. –

+3

+1 za zrobienie 'Nullabe ' krótszego, a także ... – Xaqron