In C #, you can bring, for example, a variable of type float to type int , while the value will be truncated so that it fits into a variable of a new type.

 float a = 1; int b = (int)a; 

But I have such a situation that I use reflection, and the type must be given in the course of the program.

How can this be done, and is it even possible? What types can you give so?

    1 answer 1

    For example, use the Convert.ToInt32() method :

     object[] values = { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12), "104", "103.0", "-1", "1.00e2", "One", 1.00e2, 16.3e42}; int result; foreach (object 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("The {0} value {1} is outside the range of the Int32 type.", value.GetType().Name, value); } catch (FormatException) { Console.WriteLine("The {0} value {1} is not in a recognizable format.", value.GetType().Name, value); } catch (InvalidCastException) { Console.WriteLine("No conversion to an Int32 exists for the {0} value {1}.", value.GetType().Name, value); } } // The example displays the following output: // Converted the Boolean value True to the Int32 value 1. // Converted the Int32 value -12 to the Int32 value -12. // Converted the Int32 value 163 to the Int32 value 163. // Converted the Int32 value 935 to the Int32 value 935. // Converted the Char value x to the Int32 value 120. // No conversion to an Int32 exists for the DateTime value 5/12/2009 12:00:00 AM. // Converted the String value 104 to the Int32 value 104. // The String value 103.0 is not in a recognizable format. // Converted the String value -1 to the Int32 value -1. // The String value 1.00e2 is not in a recognizable format. // The String value One is not in a recognizable format. // Converted the Double value 100 to the Int32 value 100. // The Double value 1.63E+43 is outside the range of the Int32 type. 
    • but what if I do not know what type I need to lead? since the cast is performed dynamically, it may be necessary to cast not only to int but also to byte , short or other numeric types. - ANU CHEEKI BREEKI
    • Then use Convert.ChangeType , it has the second parameter - the output type. Reflection determines what type you need and pass it on to this method ... - Andrey NOP
    • The problem is that I have already tried it. When trying to convert float to int, it throws an exception about the impossibility of casting. - ANU CHEEKI BREEKI
    • one
      I do not believe! Everything works: object a = (float)10; object b = Convert.ChangeType(a, typeof(int)); Console.WriteLine($"{b} Type: {b.GetType()}"); object a = (float)10; object b = Convert.ChangeType(a, typeof(int)); Console.WriteLine($"{b} Type: {b.GetType()}"); - Andrei NOP
    • I love programming) Your code works. - ANU CHEEKI BREEKI