.net – How to Convert Types at Runtime

.netreflectionruntimetype-conversion

My scenario should be simple… the type I want to convert FROM is ALWAYS 'string'. What I want to convert to… could be many things – ints, DateTimes, … strings, etc.

This would be easy:

string valueToConvertFrom = "123";

int blah = Convert.ToInt32(valueToConvertFrom);

However… I don't know (until runtime) that the value I need to convert to is an 'Int' (or whatever). I have tried this:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

object blah = Convert.ChangeType(valueToConvertFrom, convertToType);

But that gives me the following error: "Object must implement IConvertible."

I don't want to have to do a switch statement and call "Convert.ToBlah" based on the type name… any suggestions?

Best Solution

the clean way to do it is using the a TypeConverter. you can get an instance of a type converter by calling the TypeDescriptor.GetConverter and then using the instance of the type converter to do the convertion. so something like this:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

TypeConverter tc =  TypeDescriptor.GetConverter(convertToType);             

object blah =tc.ConvertFromString(valueToConvertFrom);