C# Tip Article
Primitive types in C#
In CLR, the primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single. And there are corresponding C# keyword for the primitive types as follows.
| CLR Primitive | C# keyword |
|---|---|
| Boolean | bool |
| Byte | byte |
| SByte | sbyte |
| Int16 | short |
| UInt16 | ushort |
| Int32 | int |
| UInt32 | uint |
| Int64 | long |
| UInt64 | ulong |
| Char | char |
| Single | float |
| Double | double |
| IntPtr | N/A |
| UIntPtr | N/A |
To check out whether the object type in question is primitive or not, use Type.IsPrimitive property.
// example1 var x = GetData(); bool b = x.GetType().IsPrimitive; // example2 bool b = typeof(decimal).IsPrimitive; // false
It is worth noting that there are some types that appear to be primitive types but are not, say for example, decimal, DateTime, or string.
In C#, primitive types are predefined struct (value) types, so string is not primitive since it is a reference type. (Of course not all built-in .NET value types are primitive types.)
C# decimal is an alias for System.Decimal, as you can see below, Decimal is a struct that consists of many primitive type (int) fields. DateTime also is based on UInt64 data field, and is not considered as primitive type.
public struct Decimal
{
private int flags;
private int hi;
private int lo;
private int mid;
}
