考虑以下示例代码:

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/

10-13 09:38