Betrachten Sie den folgenden Beispielcode:
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;
}
Jetzt muss ich etwas Ähnliches durch Nachdenken tun:
void SetValue(PropertyInfo info, object instance, object value)
{
// throws System.ArgumentException: Decimal can not be converted to Int64
info.SetValue(instance, value)
}
Beachten Sie, dass ich nicht davon ausgehen kann, dass PropertyInfo immer eine lange Zahl darstellt, und dass dieser Wert auch nicht immer eine Dezimalzahl ist. Ich weiß jedoch, dass der Wert für diese Eigenschaft in den richtigen Typ umgewandelt werden kann.
Wie kann ich den Parameter 'value' durch Reflektion in den von der PropertyInfo-Instanz dargestellten Typ konvertieren?
Convert.ChangeType(value, property.PropertyType);
dies immer noch fehlschlagen kann, wennvalue
dieIConvertible
Schnittstelle nicht implementiert wird. Zum Beispiel, wenninfo.PropertyType
es einigeIEnumerable