2009-09-25 4 views
0

У меня есть класс ActiveRecord Castle с свойством DateTime. Я импортировать данные из текстового файла, и хотел бы быть в состоянии сделать что-то вроде этого:Автоматическое преобразование типа с замком Свойства ActiveRecord

string date_started = "09/25/2009"; 
MyClass myclass = new MyClass; 
myclass.date_started = date_started; 

На финальном задании, за кулисами, было бы идеально проверить тип date_started, и если это DateTime, выполните задание, в противном случае выполните Convert.ToDateTime(date_started).

Я не могу переопределить accessors [*], а неявные операторы работают только при преобразовании в класс или из него. Я попытался расширить DateTime с неявным преобразованием оператора, но обнаружил, что он был запечатан. Теперь я очень несчастный динамический программист, застрявший в статически типизированном мире.

Я мог бы, конечно, проверить «вручную», но я создаю много разных объектов со многими свойствами и надеялся, что сможет их переплетать (используя отражение), не требуя особых свойств специальной обработки. Я мог бы определить свои собственные пользовательские аксессоры, но для этого снова требуется специальная обработка при назначении, так как они должны использоваться как методы (setX(val)), а не свойства (X = val).

Может ли C# (2.0) или Castle ActiveRecord предложить мне любой чистый способ получить преобразование String -> DateTime в фоновом режиме?

ответ

2

Используйте FileHelpers для импорта текстовых данных. Ваш класс ActiveRecord будет украшен как ActiveRecord , так и атрибутами FileHelpers, например:

[ActiveRecord] 
[DelimitedRecord("|")] // FileHelpers 
class MyClass { 
    [Property] // from ActiveRecord 
    [FieldConverter(ConverterKind.Date, "ddMMyyyy")] // from FileHelpers 
    public DateTime DateStarted {get;set;} 
    ... 
} 
Смежные вопросы