引言: 透過反射以程式方式操作物件通常需要使用各種資料類型的賦值來設定屬性。此問題探討了一個常見情況:使用字串值設定屬性。
問題: 考慮一個具有雙精度類型 Latitude 屬性的 Ship 類別。嘗試使用反射設定此屬性,程式碼如下:
<code>Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, value, null);</code>
但是,這段程式碼會因 ArgumentException 而失敗,因為字串值無法直接轉換為雙精度型。
解: 為了解決這個問題,必須根據 PropertyInfo 明確地將字串值轉換為正確的類型。為此目的,一個通用的工具是 Convert.ChangeType()。它利用運行時資訊在 IConvertible 類型之間轉換。
使用 Convert.ChangeType() 的修改後的程式碼是:
<code>Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>
此程式碼成功地將 Latitude 屬性設定為轉換後的雙精度值。
以上是當值為字串時,如何使用反射設定屬性的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!