Type casting in C#
Type casting in C# is a way to convert a value of one data type to another. In C#, there are two types of casting:
- Implicit Casting (Automatic) - conversion of a smaller type to a larger type size. C# handles this casting automatically for types like converting an
int
to a float
.
- Explicit Casting (Manual) - conversion of a larger type to a smaller size type. C# does not handle this automatically because it can potentially lead to data loss. This requires a cast operator in the form of parentheses with the type that you are casting to.
Let me provide you with an example that demonstrates both implicit and explicit casting:
using System;
class TypeCastingExample
{
static void Main()
{
// Implicit casting (automatically) - no data loss
int myInt = 9;
double myDouble = myInt; // An int can be safely cast into a double
Console.WriteLine("Implicit Casting:");
Console.WriteLine("Int value: " + myInt); // Outputs 9
Console.WriteLine("Double value: " + myDouble); // Outputs 9
// Explicit casting (manually) - possible data loss
double anotherDouble = 9.78;
int anotherInt = (int)anotherDouble; // Cast double to int
Console.WriteLine("\nExplicit Casting:");
Console.WriteLine("Double value: " + anotherDouble); // Outputs 9.78
Console.WriteLine("Int value: " + anotherInt); // Outputs 9, not 9.78, because of data loss (decimal part is truncated)
// Another example of explicit casting
byte myByte;
int mySecondInt = 275;
myByte = (byte)mySecondInt; // Cast int to byte
Console.WriteLine("\nAnother Explicit Casting:");
Console.WriteLine("Int value: " + mySecondInt); // Outputs 275
Console.WriteLine("Byte value: " + myByte); // Outputs 19, because 275 is larger than byte's max value(255) and thus overflows
// Using Convert class to convert types
string numberString = "12345";
int convertedInt = Convert.ToInt32(numberString);
Console.WriteLine("\nConversion using Convert class:");
Console.WriteLine("String value: " + numberString); // Outputs "12345"
Console.WriteLine("Converted Int value: " + convertedInt); // Outputs 12345
}
}
This program will produce the following output:
Implicit Casting:
Int value: 9
Double value: 9
Explicit Casting:
Double value: 9.78
Int value: 9
Another Explicit Casting:
Int value: 275
Byte value: 19
Conversion using Convert class:
String value: "12345"
Converted Int value: 12345
In the output:
- The implicit cast did not lose any data because a
double
can represent all int
values.
- The explicit cast from
double
to int
lost the decimal part, and only the integer part was assigned to anotherInt
.
- The explicit cast from
int
to byte
resulted in overflow because the original int
value was outside of the byte
range (0-255), demonstrating the potential data loss or unexpected behavior when casting without proper range checks.
- The
Convert
class was used to convert a string
representation of a number to an int
without the need for casting operators.
This example is crafted to explain type casting in C# and should be easy to follow for anyone learning the concept.