Является ли DateTime примитивным типом?

Согласно тому, что я могу найти, я считаю, что DateTime является примитивным типом, но когда я проверяю свою переменную DateTime, свойство «IsPrimitive» имеет значение false.

http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx

В статье выше вы увидите, что они говорят, что DateTime примитивен. Я что-то не так делаю или статью не так прочитал?


person Gravinco    schedule 05.11.2014    source источник
comment
Тип значения Date является примитивным типом, который представляет дату и/или время и сопоставляется с System.DateTime.   -  person devqon    schedule 05.11.2014
comment
Эта статья относится к категории Visual Basic.   -  person User 12345678    schedule 05.11.2014
comment
typeof(DateTime).IsPrimitive также возвращает false.   -  person Soner Gönül    schedule 05.11.2014
comment
Почему тебе не все равно? На практике совершенно неважно, примитивен он или нет. DateTime — это просто тип значения.   -  person CodesInChaos    schedule 05.11.2014
comment
Этот вопрос заслуживает большего доверия, чем он получил. Удивительно, что нет прямого эквивалента VB.NET Date на C#, и невозможно сказать, сколько людей потратили хотя бы короткое время на его поиски.   -  person Panzercrisis    schedule 03.01.2017
comment
@CodesInChaos Это не имеет значения. Например, определение того, будут ли атрибуты [FromURI] или [FromBody] применять поведение по умолчанию, зависит от того, является ли значение примитивным типом или нет в методе API.   -  person Nick Gallimore    schedule 21.05.2018


Ответы (3)


страница MSDN на IsPrimitive перечисляет типы .net, которые считаются примитивными с точки зрения этого метода:

Примитивными типами являются Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double и Single.

И DateTime в этом списке нет.

person vc 74    schedule 05.11.2014

Date (сопоставляется с System.DateTime) — это примитивный тип языка Visual Basic .NET (сокращенно VB.NET).

Это не примитивный тип в C# и не примитивный тип в CLR.

Примитивный тип для данного языка — это тип, для которого вы можете написать строковый литерал, и этот литерал понимается компилятором как относящийся к соответствующему типу. Вы не можете сделать это для DateTime в С#.

Примитивный тип для CLR — это тип, для которого разрешены некоторые низкоуровневые оптимизации. Это очень ограничено: только строка и различные структуры целых чисел и чисел с плавающей запятой являются примитивными типами.

person Falanwe    schedule 05.11.2014
comment
Я бы не назвал decimal примитивным, несмотря на магию компилятора. Я бы избегал слова «примитивный», говоря о C#, поскольку спецификация не определяет его должным образом. На уровне CLR эта концепция хоть и определена, но все еще имеет мало практического значения. - person CodesInChaos; 05.11.2014
comment
Для CLR String не является примитивным в том смысле, что typeof(string).IsPrimitive ложно. - person Jeppe Stig Nielsen; 16.09.2015
comment
@CodesInChaos Я согласен! В Спецификации языка C# упоминаются предопределенные типы структур, которые сильно пересекаются с типами, которые CLR считает примитивными. Хотя ни один набор не входит в другой. Конечно, C# также имеет ключевые слова для предопределенных типов string, object и dynamic, но они являются ссылочными типами. Наконец, специальный тип void имеет в C# свое ключевое слово, но C#, по-видимому, не считает его структурным типом, а CLR не считает его примитивным. void — это аномальный тип значения. - person Jeppe Stig Nielsen; 16.09.2015

Используйте Type.IsPrimitive чтобы определить, является ли тип примитивным.

Для вашего конкретного вопроса вы можете попробовать DateTime.Now.GetType().IsPrimitive. (Это возвращает false). Ссылка в принятом ответе относится к примитивным типам спецификации языка Visual Basic...

person Ahmad    schedule 11.03.2016