Hãy xem xét mã mẫu sau:
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;
}
Bây giờ tôi cần làm điều gì đó tương tự thông qua phản ánh:
void SetValue(PropertyInfo info, object instance, object value)
{
// throws System.ArgumentException: Decimal can not be converted to Int64
info.SetValue(instance, value)
}
Lưu ý rằng tôi không thể giả định rằng PropertyInfo luôn đại diện cho một giá trị dài, không phải giá trị đó luôn là số thập phân. Tuy nhiên, tôi biết rằng giá trị có thể được chuyển thành đúng loại cho thuộc tính đó.
Làm cách nào để tôi có thể chuyển đổi tham số 'value' thành kiểu được đại diện bởi cá thể PropertyInfo thông qua phản chiếu?
Convert.ChangeType(value, property.PropertyType);
vẫn có thể thất bại nếuvalue
không triển khaiIConvertible
giao diện. Ví dụ, nếuinfo.PropertyType
là một sốIEnumerable