Какие типы данных C# могут быть nullable типами?

Кто-то может дать мне список или указать на меня туда, где я могу найти список типов данных C#, которые могут быть nullable типом?

Например:

  • Я знаю это Nullable<int> в порядке
  • Я знаю это Nullable<byte[]> не.

Я хотел бы знать, какие типы nullable и которые не являются. BTW, я знаю, что могу протестировать на это во времени выполнения. Однако это для генератора кода, который мы пишем, таким образом, у меня нет фактического типа. Я просто знаю, что столбец string или int32 (и т.д.).

9
задан alex 23 April 2015 в 19:44
поделиться

3 ответа

Все типы значений (кроме самого Nullable ) могут использоваться в типах, допускающих значение NULL, т. Е. Все типы, производные от System.ValueType (который также включает перечисление с!).

Причина в том, что Nullable объявлен примерно так:

struct Nullable<T> where T : struct, new() { … }
20
ответ дан 4 December 2019 в 09:12
поделиться

Тип считается допускающим значение NULL, если ему может быть присвоено значение или может быть присвоено значение NULL, что означает, что тип не имеет значение каким бы то ни было. Следовательно, тип, допускающий значение NULL, может выражать значение или значение, которое не существует. Например, ссылочный тип, такой как String, допускает значение NULL, тогда как тип значения, такой как Int32, - нет. Тип значения не может иметь значение NULL, потому что он имеет достаточная емкость, чтобы выразить только значения, подходящие для этого типа; он не имеет дополнения l емкость, необходимая для выражения нулевого значения.

Структура Nullable поддерживает использование только типа значения в качестве типа, допускающего значение NULL, поскольку ссылочные типы допускают значение NULL по дизайну.

Класс Nullable обеспечивает дополнительную поддержку структуры Nullable. Класс Nullable поддерживает получение базового типа типа, допускающего значение NULL, а также операции сравнения и равенства с парами типов, допускающих значение NULL, чей базовый тип значения не поддерживает универсальные операции сравнения и равенства.

Из справочной документации http://msdn.microsoft.com / en-us / library / b3h38hb0.aspx

2
ответ дан 4 December 2019 в 09:12
поделиться

Это может быть любой тип значения, включая структуру, он не может быть ссылочным типом, поскольку они уже изначально допускают значение NULL.

Да: Int32 double DateTime CustomStruct и т. Д.

Нет: строка Массив CustomClass и т. Д.

Дополнительные сведения см. В MSDN: http://msdn.microsoft.com/en-us/library/2cf62fcy (v = VS.80) .aspx

1
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: