Extend a TypeConverter

.net, c#, typeconverter

Solution

You need to allocate the converter. On a property-by-property basis, you can use:

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

This would then work for usage of the form:

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

This will work for most common binding scenarios.

(edit)

To set the converter for any `DateTime`:

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

Now your sample code should work.

Problem

The DateTimeConverter class provides conversions between DateTime and string. I would also like to support conversions between DateTime and double. According to MSDN I can extend the DateTimeConverter class to do this - see MSDN DateTimeConverter I have created a class that inherits from DateTimeConverter and provides the appropriate overrides for CanConvertTo, CanConvertFrom, etc. How do I make sure that the framework uses my DateTime converter (DateTimeConverterEx) instead of the one provided in the BCL (DateTimeConverter) when the code below is called? ``` 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)); ``` Thanks.

Original source