使用Castle ActiveRecord属性自动进行类型转换
问题描述:
我有一个具有DateTime属性的Castle ActiveRecord类。我从一个文本文件导入数据,并会喜欢能够做这样的事情:使用Castle ActiveRecord属性自动进行类型转换
string date_started = "09/25/2009";
MyClass myclass = new MyClass;
myclass.date_started = date_started;
在最后的分配,在幕后,那就最好检查date_started
的类型,如果是日期时间,做任务,否则做Convert.ToDateTime(date_started)
。
转换或从包含类时,我不能重写访问器[*],和隐式运营商仅工作。我试着用隐式运算符转换来扩展DateTime,但发现它被封了。现在我是一个陷入静态类型世界的非常不愉快的动态程序员。
我当然可以检查“手动”,但我实例化许多不同的对象具有许多属性,并希望能够循环它们(使用反射),而不必给予特定属性的特殊处理。我可以定义自己的自定义访问器,但这又需要在赋值时进行特殊处理,因为它们需要像方法(setX(val)
)而不是属性(X = val
)一样使用。
C#(2.0)或Castle ActiveRecord可以为我提供任何干净的方法来在后台获取String - > DateTime转换吗?
答
使用FileHelpers来导入文本数据。您的ActiveRecord类将装饰ActiveRecord 和 FileHelpers属性,如下所示:
[ActiveRecord]
[DelimitedRecord("|")] // FileHelpers
class MyClass {
[Property] // from ActiveRecord
[FieldConverter(ConverterKind.Date, "ddMMyyyy")] // from FileHelpers
public DateTime DateStarted {get;set;}
...
}