次のサンプルコードを検討してください。
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
info.PropertyType
IEnumerable