文字列を、文字列として名前を持つオブジェクトのプロパティ値に変換したいです。次のように実行しようとしています:
string modelProperty = "Some Property Name";
string value = "SomeValue";
var property = entity.GetType().GetProperty(modelProperty);
if (property != null) {
property.SetValue(entity,
Convert.ChangeType(value, property.PropertyType), null);
}
問題は、プロパティ タイプが null 許容型の場合、これが失敗し、無効なキャスト例外がスローされることです。これは、値を変換できない場合ではありません。手動でこれを行うと機能します (例DateTime? d = Convert.ToDateTime(value);
) 同様の質問をいくつか見ましたが、まだ機能しません。
ベストアンサー1
テストされていませんが、おそらく次のようなものが機能するでしょう:
string modelProperty = "Some Property Name";
string value = "Some Value";
var property = entity.GetType().GetProperty(modelProperty);
if (property != null)
{
Type t = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
object safeValue = (value == null) ? null : Convert.ChangeType(value, t);
property.SetValue(entity, safeValue, null);
}