Как сделать «структуру» обнуляемой по определению? - PullRequest
46 голосов
/ 20 декабря 2010
struct AccountInfo
{
   String Username;
   String Password;
}

Теперь, если я хочу иметь экземпляр Nullable, я должен написать:

Nullable<AccountInfo> myAccount = null;

Но я хочу сделать struct Nullable по своей природе, и его можно использовать так (без использования Nullable<T>):

AccountInfo myAccount = null;

Ответы [ 3 ]

51 голосов
/ 20 декабря 2010

Вы не можете. Структуры считаются типами значений и по определению не могут быть нулевыми. Самый простой способ сделать его nullable - сделать его ссылочным типом.

Ответ, который вам нужно задать себе: «Почему это структура?» и если вы не можете придумать действительно вескую причину, не делайте это и не превращайте ее в класс. Аргумент о том, что структура является «более быстрой», действительно преувеличен, поскольку структуры не обязательно создаются в стеке (на это не следует полагаться), а «набираемая» скорость зависит от конкретного случая.

См. Сообщение Эрика Липперта о классовых дебатах и ​​скорости.

41 голосов
/ 20 декабря 2010

Когда вы объявляете это, объявляете это с "?" если вы предпочитаете

AccountInfo? myAccount = null;
16 голосов
/ 20 декабря 2010

Краткий ответ: сделайте это классом.

Длинный ответ: эта структура является изменчивой, структура которой никогда не должна быть, не представляет единого значения, которое структура всегда должна иметь, и не имеет разумного «нулевого» значения, которое структура также всегда должна, так что, вероятно, не должно быть тип значения. Делая его классом (ссылочным типом), вы всегда можете быть нулевым.


Примечание. Употребление таких слов, как «никогда» и «всегда», следует использовать с подразумеваемым «почти».

...