निम्नलिखित नमूना कोड पर विचार करें:
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 उदाहरण द्वारा दर्शाए गए प्रकार के लिए 'मान' पैरामीटर कैसे बदल सकता हूं?
Convert.ChangeType(value, property.PropertyType);
अभी भी विफल हो सकता है अगर इंटरफ़ेस कोvalue
लागू नहीं करताIConvertible
है। उदाहरण के लिए, यदिinfo.PropertyType
कुछ हैIEnumerable