尝试使用反射来更新我的模型的特定属性。 这适用于所有其他类型的我的模型,但类型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'或相关。 –