2015-01-02 5 views
4

Попробуйте обновить определенное свойство моей модели с помощью Reflection. Это работает для всех других типов моей модели, кроме свойств типа DateTime?Задайте значение свойства nullable 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]]' 

Как это можно решить?

Update

Понял работу с раствором Daniel A. White «s

код обновляется (вероятно, нуждается в точной настройке, но работает):

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(); 
} 
+2

Что такое фактическое сообщение об ошибке? –

+0

Недопустимый литой из 'System.String' в 'System.Nullable'1 [[System.DateTime, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]' – Dairo

+8

вы должны использовать 'DateTime.Parse' или «TryParse» или связанные с ним. –

ответ

0

попытаться преобразовать значение to DateTime: DateTime.Parse (значение);

4

Попробуйте заменить

Convert.ChangeType(value, propertyInfo.PropertyType) 

по

Convert.ChangeType(value, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType) 

(не проверено)

+0

выглядит так, как будто это работает ... до OP !! :) –

Смежные вопросы