2009-01-19 130 views
3

DateTimeConverter類提供DateTime和string之間的轉換。我也想支持DateTime和double之間的轉換。擴展類型轉換器

根據MSDN我可以擴展DateTimeConverter類來做到這一點 - 看到MSDN DateTimeConverter

我創建了一個類,從DateTimeConverter繼承,並提供了CanConvertTo,CanConvertFrom適當的覆蓋等

怎麼辦我確定當調用下面的代碼時,框架使用DateTime轉換器(DateTimeConverterEx)而不是BCL(DateTimeConverter)中提供的轉換器?

DateTime dt = DateTime.Now; 
    // This line returns a DateTimeConverter which I don't want. 
    // Would like to get a DateTimeConverterEx. 
    TypeConverter tc = TypeDescriptor.GetConverter(dt); 
    double dbl = (double)tc.ConvertTo(dt, typeof(double)); 

謝謝。

+0

爲什麼不直接聲明tyep轉換器的新實例? TypeConverter tc = new MyConverter(); 是否有一個特定的原因,你需要調用TypeDescriptor的方法? – Noldorin 2009-01-19 20:17:29

回答

11

您需要分配轉換器。對財產的屬性的基礎上,你可以使用:

[TypeConverter(typeof(DateTimeConverterEx))] 
public DateTime Foo {get {...} set {...}} 

這就將申請表格的使用工作:

var prop = TypeDescriptor.GetProperties(obj)["Foo"]; 
var converter = prop.Converter; 
// as before, using "converter" 

這將爲最常見的綁定方案工作。

編輯

要設置轉換器任何DateTime

TypeDescriptor.AddAttributes(typeof(DateTime), 
    new TypeConverterAttribute(typeof(DateTimeConverterEx))); 

現在你的示例代碼應該工作。