Вы можете использовать PropertyInfo.PropertyType.IsAssignableFrom (value.GetType ()) выражение, чтобы определить, может ли указанное значение быть записано в свойство.Но вам нужно обработать случай, когда значение равно NULL, поэтому в этом случае вы можете назначить его свойству только в том случае, если тип свойства имеет значение NULL или тип свойства является ссылочным типом:
public bool CanAssignValueToProperty(PropertyInfo propertyInfo, object value)
{
if (value == null)
return Nullable.GetUnderlyingType(propertyInfo.PropertyType) != null ||
!propertyInfo.IsValueType;
else
return propertyInfo.PropertyType.IsAssignableFrom(value.GetType());
}
Также может оказаться полезным преобразоватьМетод .ChangeType для записи конвертируемых значений в свойство.