考虑以下示例代码:
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,该值也不总是小数。但是,我知道可以将值转换为该属性的正确类型。
如何通过反射将“值”参数转换为由 PropertyInfo 实例表示的类型?
最佳答案
void SetValue(PropertyInfo info, object instance, object value)
{
info.SetValue(instance, Convert.ChangeType(value, info.PropertyType));
}
关于c# - 用反射“类型转换”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1398796/