다음 샘플 코드를 고려하십시오.
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을 나타내고 그 값이 항상 10 진수가 아니라고 가정 할 수는 없습니다. 그러나 값이 해당 속성에 대한 올바른 유형으로 캐스팅 될 수 있음을 알고 있습니다.
리플렉션을 통해 'value'매개 변수를 PropertyInfo 인스턴스가 나타내는 유형으로 어떻게 변환 할 수 있습니까?
Convert.ChangeType(value, property.PropertyType);
경우 실패 할 수 있습니다value
구현하지 않는IConvertible
인터페이스를. 예를 들어 ifinfo.PropertyType
is someIEnumerable