扩展TypeConverter

six*_*wns 3 .net c# typeconverter

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));
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*ell 11

您需要分配转换器.在逐个房产的基础上,您可以使用:

[TypeConverter(typeof(DateTimeConverterEx))]
public DateTime Foo {get {...} set {...}}
Run Code Online (Sandbox Code Playgroud)

这将适用于表单的使用:

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

这适用于大多数常见的绑定方案.

(编辑)

要为任何 设置转换器DateTime:

TypeDescriptor.AddAttributes(typeof(DateTime),
    new TypeConverterAttribute(typeof(DateTimeConverterEx)));
Run Code Online (Sandbox Code Playgroud)

现在您的示例代码应该可行.