2014-11-05 3 views
3

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

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

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

+0

«Тип значения даты - это примитивный тип, который представляет дату и/или время и ** отображает на ** Систему .DateTime " – devqon

+3

Эта статья является * Visual Basic *. –

+0

'typeof (DateTime) .IsPrimitive' возвращает' false'. –

ответ

3

В MSDN page on IsPrimitive перечислены типы .net, которые считаются примитивным, насколько этот метод обеспокоен:

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

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

4

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

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

Примитивный тип для данного языка - это тип, для которого вы можете написать строку litteral, и этот litterla понимается компилятором как релевантный тип. Вы не можете сделать это для DateTime в C#.

Тип примитива для CLR - это тип, при котором допускаются некоторые оптимизации низкого уровня. Он очень ограничен: только строки и разные целые числа и числа чисел с номерами чисел являются примитивными типами.

+0

Я бы не назвал примитив 'decimal', несмотря на магию компилятора. Я бы избегал слова «примитив», когда говорил о C#, поскольку спецификация не определяет его должным образом. На уровне CLR концепция, по крайней мере, определена, но по-прежнему мало практической. – CodesInChaos

+1

К CLR, 'String' не является примитивным в том смысле, что' typeof (string) .IsPrimitive' является ложным. –

+0

@CodesInChaos Я согласен! Спецификация языка C# упоминает *** предопределенные типы структуры ***, которые имеют большое пересечение с типами, которые CLR считает примитивными. Хотя ни один из них не включен в другой.Конечно, у C# также есть ключевые слова для «предопределенных» типов 'string',' object' и 'dynamic', но они являются ссылочными типами. Наконец, специальный тип 'void' имеет свое собственное ключевое слово в C#, но C# не считает его структурным типом, по-видимому, и CLR не считает его примитивным. 'void' является аномальным типом значения. –

0

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

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

Смежные вопросы