リフレクションを使用して文字列型の属性値を設定します
リフレクションを使用して文字列型の属性値を設定する場合、ターゲット属性が他の型を予期している場合、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 中国語 Web サイトの他の関連記事を参照してください。