首頁 >後端開發 >C++ >當值為字串時,如何使用反射設定屬性的值?

當值為字串時,如何使用反射設定屬性的值?

Susan Sarandon
Susan Sarandon原創
2025-01-20 10:37:09732瀏覽

How Can I Set a Property's Value Using Reflection When the Value is a String?

使用反射設定字串屬性值

引言: 透過反射以程式方式操作物件通常需要使用各種資料類型的賦值來設定屬性。此問題探討了一個常見情況:使用字串值設定屬性。

問題: 考慮一個具有雙精度類型 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn