Is it possible to convert an integer into an unsinged integer without the need of explicit typecasts?
I have the following code -
using System;
class MainClass
{
public static void Main ()
{
int num1 = -33;
uint num2 = Convert.ToUInt32 (num1);
Console.WriteLine (num2);
}
}
It throws me the error -
System.OverflowException has been thrown.
Value was either too large or too small for a UInt32
I don't want to use explicit typecasting. Is it possible this way?
The question is not a duplicate of the question How can I convert a signed integer into an unsigned integer? As I have specifically mentioned that I want to know is it possible without using explicit typecasting or not?
I want to know if it is possible without explicit typecasting?
The short answer is: Nope.
I want to know the reason of existence of the function Convert.ToUInt32()
Answer: Someone at microsoft found it helpful and created that. Others found it helpful/easy to use and used it. I guess we won't find the concrete reason for implementing that function.
This answer states 4 possibilities. Each of them include a typecast. I don't know another built-in feature to convert uint to int. That answer nicely explains the converting of uint->int and it's pitfalls.
(UltraShort)Summary: You have to take care of overflows.
You should have a look at checked and unchecked keywords when dealing with unsigned types.
Depending on this there are 4 methods of TypeConversion.
Codesample for ToInt32() is taken from msdn.
float[] values= { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
int result;
foreach (float value in values)
{
try {
result = Convert.ToInt32(value);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
value.GetType().Name, value, result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("{0} is outside the range of the Int32 type.", value);
}
}
// The example displays the following output:
// -3.40282346638529E+38 is outside the range of the Int32 type.
// -13799999488 is outside the range of the Int32 type.
// Converted the Double value -1023.29901123047 to the Int32 value -1023.
// Converted the Double value -12.9799995422363 to the Int32 value -13.
// Converted the Double value 0 to the Int32 value 0.
// Converted the Double value 9.11299983940444E-16 to the Int32 value 0.
// Converted the Double value 103.918998718262 to the Int32 value 104.
// Converted the Double value 17834.19140625 to the Int32 value 17834.
// 3.40282346638529E+38 is outside the range of the Int32 type.
Codesample for Convert.ToUInt(Int32) also taken from msdn
int[] numbers = { Int32.MinValue, -1203, 0, 121, 1340, Int32.MaxValue };
uint result;
foreach (int number in numbers)
{
try {
result = Convert.ToUInt32(number);
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
number.GetType().Name, number,
result.GetType().Name, result);
}
catch (OverflowException) {
Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
number.GetType().Name, number);
}
}
// The example displays the following output:
// The Int32 value -2147483648 is outside the range of the UInt32 type.
// The Int32 value -1203 is outside the range of the UInt32 type.
// Converted the Int32 value 0 to the UInt32 value 0.
// Converted the Int32 value 121 to the UInt32 value 121.
// Converted the Int32 value 1340 to the UInt32 value 1340.
// Converted the Int32 value 2147483647 to the UInt32 value 2147483647.