Обнуляемое преобразование типов в C #? - PullRequest
0 голосов
/ 12 февраля 2010

мы можем присвоить нулевое значение для типа структуры переменной?

struct MyStruct
{
}

MyStruct var = null;

это возможно в C # .net?

если нет? тогда как C # позволяет Nullable struct тип переменной может быть назначен как ноль?

Ответы [ 4 ]

7 голосов
/ 12 февраля 2010

Да, это возможно, но вы должны объявить вашу переменную как 'nullable':

MyStruct? foo = null;

или

Nullable<MyStruct> foo = null;
2 голосов
/ 12 февраля 2010

В C # struct s являются типами значений, тогда как class es являются ссылочными типами.

struct s нельзя сделать null, поэтому вы должны использовать класс Nullable<T>, чтобы превратить его во что-то, что может быть аннулировано.

Это можно сделать, либо напрямую используя класс Nullable<T> в объявлении:

Nullable<MyStruct> foo;

Или используя синтаксический сахар для Nullable<T>:

MyStruct? foo;
0 голосов
/ 18 апреля 2010

По теме:

... как C # допускает, что переменная типа Nullable struct может быть присвоена как null?

Ответ на самом деле довольно прост: компилятор C # знает о Nullable<T> и рассматривает его как особый случай для поддержания иллюзии.

Например, это:

int? a;
if (a != null) ...

На самом деле компилируется в это:

if (a.HasValue) ...

Практически вся эта магия обрабатывается компилятором - .NET в основном рассматривает Nullable<T> как просто еще один ValueType. Я помню, как читал (скорее всего, из блога Эрика Липперта ), что в конце процесса разработки они обнаружили одну крайнюю проблему, которая просто не могла быть решена с помощью одних трюков компилятора. Люди во время выполнения согласились сделать одно изменение, которое рассматривало Nullable<T> как особый случай. К сожалению, я не помню, что это был за особый случай, и больше не могу найти ссылку.

Пожалуйста, просмотрите эту статью для деталей (особенно второй комментарий Липперта): http://blogs.msdn.com/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx

0 голосов
/ 12 февраля 2010

Структуры не могут быть нулевыми, Обнуляемые типы используются для создания экземпляров обнуляемых структур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...