Considere el siguiente código de muestra:
class SampleClass
{
public long SomeProperty { get; set; }
}
public void SetValue(SampleClass instance, decimal value)
{
// value is of type decimal, but is in reality a natural number => cast
instance.SomeProperty = (long)value;
}
Ahora necesito hacer algo similar a través de la reflexión:
void SetValue(PropertyInfo info, object instance, object value)
{
// throws System.ArgumentException: Decimal can not be converted to Int64
info.SetValue(instance, value)
}
Tenga en cuenta que no puedo asumir que PropertyInfo siempre representa un valor largo, ni ese valor es siempre un decimal. Sin embargo, sé que el valor se puede convertir al tipo correcto para esa propiedad.
¿Cómo puedo convertir el parámetro 'valor' al tipo representado por la instancia PropertyInfo a través de la reflexión?
Convert.ChangeType(value, property.PropertyType);
aún puede fallar sivalue
no implementa laIConvertible
interfaz. Por ejemplo, siinfo.PropertyType
es algoIEnumerable