使用反射設定字串型屬性值
使用反射設定字串類型屬性值時,如果目標屬性預期的是其他類型,則可能會導致 ArgumentException 例外。
解決方案:使用 Convert.ChangeType() 進行動態型別轉換
為了解決這個問題,可以使用 Convert.ChangeType() 方法。此方法利用運行時資訊來轉換資料類型。但是,需要注意的是,並非所有轉換都是可行的。
程式碼範例:
考慮以下程式碼片段:
<code class="language-csharp">Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>
propertyInfo = ship.GetType().GetProperty("Latitude")
取得 "Latitude" 屬性資訊。 Convert.ChangeType(value, propertyInfo.PropertyType)
將字串 "5.5" 轉換為雙精確度浮點數,這與屬性類型相符。 propertyInfo.SetValue(ship, ..., null)
將屬性設定為轉換後的值。 注意: 此解假設沒有異常處理或針對使用 Convert.ChangeType() 無法直接轉換的類型的特殊情況邏輯。
以上是如何在 C# 中使用反射安全地設定字串屬性值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!