Primitives
A C# primitive is a predefined, intrinsic data type. Although the primitives are declared as C# keywords, the keywords are actually aliases for types in the .NET Framework Class. Primitives are value types and are allocated space on the stack—except for the string type. The string type is—in fact—a class and is, therefore, allocated space on the heap.
Despite being value types, primitives are objects complete with interfaces and public methods.
| C# Primitives | |||
| Type | Primitive | Usage | Range |
bool
| System.Boolean
| boolean | true, false
|
byte
| System.Byte
| 8 bit integer | 0 - 255 |
char
| System.Char
| 16 bit Unicode character | /u0000 - /uffff
|
decimal
| System.Decimal
| 128 bit decimal | +/-1.0x10-28 to +/-7.9x10+28 precision of 28-29 digits |
double
| System.Double
| 64 bit floating point | -1.79769313486232e308 to 1.79769313486232e308 |
float
| System.Single
| 32 bit floating point | +/-1.5x10-45 to +/-3.4x10+38 precision of 7 digits |
int
| System.Int32
| 32 bit integer | -2,147,483,648 to 2,147,483,647 |
long
| System.Int64
| 64 bit integer | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
sbyte
| System.SByte
| 8 bit integer | -128 to 127 |
short
| System.Int16
| 16 bit integer | -32,768 to 32,767 |
string
| System.String
| - | immutable, specified length |
uint
| System.UInt32
| 32 bit unsigned integer | 0 to 4,294,967,295 |
ulong
| System.UInt64
| 64 bit unsigned integer | 0 to 18,446,744,073,709,551,615 |
ushort
| System.UInt16
| 16 bit unsigned integer | 0 to 65,535 |
Visual C# Best Practices
For the most efficient storage, choose the data type which is just big enough to hold your data but no bigger. For example, for data which will range from 1 to 100, choose byte.
For the most efficient execution speed, choose a standard data type which may require fewer conversions. For example, depending on your application, it may be faster to put that same data in an int to avoid time-consuming upcasts or downcasts during calculations.