嘗試使用反射來更新我的模型的特定屬性。 這適用於所有其他類型的我的模型,但類型DateTime的屬性除外?設置可爲空的日期時間的屬性值
代碼:
public void UpdateProperty(Guid topicGuid, string property, string value)
{
var topic = Read(topicGuid);
PropertyInfo propertyInfo = topic.GetType().GetProperty(property);
propertyInfo.SetValue(topic, Convert.ChangeType(value, propertyInfo.PropertyType), null);
topic.DateModified = DateTime.Now;
Save();
}
以下錯誤是在Convert.ChangeType部分拋出:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'
這又如何解決呢?
更新
得到它與丹尼爾A.白色的解決方案時
代碼更新(可能需要一些細化和微調,但它的工作原理):
public void UpdateProperty(Guid topicGuid, string property, string value)
{
var topic = Read(topicGuid);
PropertyInfo propertyInfo = topic.GetType().GetProperty(property);
object changedType = propertyInfo.PropertyType == typeof(DateTime) || propertyInfo.PropertyType == typeof(DateTime?)
? DateTime.Parse(value)
: Convert.ChangeType(value, propertyInfo.PropertyType);
propertyInfo.SetValue(topic, changedType, null);
topic.DateModified = DateTime.Now;
Save();
}
什麼是實際的錯誤信息,以取代
? –
無效從'System.String'轉換爲'System.Nullable'1 [[System.DateTime,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]' – Dairo
'您必須使用'DateTime.Parse'或'TryParse'或相關。 –