Розглянемо такий зразок коду:
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;
}
Тепер мені потрібно зробити щось подібне через роздуми:
void SetValue(PropertyInfo info, object instance, object value)
{
// throws System.ArgumentException: Decimal can not be converted to Int64
info.SetValue(instance, value)
}
Зауважте, що я не можу припустити, що PropertyInfo завжди представляє long, і це значення не завжди є десятковою. Однак я знаю, що значення можна відлити до правильного типу для цієї властивості.
Як я можу перетворити параметр 'value' на тип, представлений екземпляром PropertyInfo за допомогою відображення?
Convert.ChangeType(value, property.PropertyType);все одно може вийти з ладу, якщоvalueне реалізуєIConvertibleінтерфейс. Наприклад, якщоinfo.PropertyTypeєIEnumerable