KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have some code (which works fine) that looks something like this: int integer = 42; decimal? castTo = integer; Then I wanted to do something similar with reflection, with some code that looks like this: object value = source; // source was an int originally var parameters = new object[1]; ... parameters[0] = value; var setMethod = property.GetSetMethod(); // Call the set method, which takes a decimal? as a parameter setMethod.Invoke(o, parameters); When I do this, I get: failed: System.ArgumentException : Object of type 'System.Int32' cannot be converted to type 'System.Nullable`1[System.Decimal]'. at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) Why would an implicit type conversion that works fine elsewhere fail with reflection? Is there a trick to using reflection to perform this conversion? Edit : Thanks all for the responses. Here is the solution I came up with, based on the answers: private object Convert(object source, Type destinationType) { if (source == null) { return null; } var sourceType = source.GetType(); // unwrap nullable types var nullableType = Nullable.GetUnderlyingType(destinationType);
Tags (comma-separated)
Save Edits
Cancel