Domanda

La classe DateTimeConverter fornisce conversioni tra DateTime e stringa. Vorrei anche supportare le conversioni tra DateTime e double.

Secondo MSDN posso estendere la classe DateTimeConverter per fare questo - vedi MSDN DateTimeConverter

Ho creato una classe che eredita da DateTimeConverter e fornisce le sostituzioni appropriate per CanConvertTo, CanConvertFrom, ecc.

Come posso assicurarmi che il framework usi il mio convertitore DateTime (DateTimeConverterEx) invece di quello fornito nel BCL (DateTimeConverter) quando viene chiamato il codice seguente?

    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));

Grazie.

È stato utile?

Soluzione

Devi allocare il convertitore. In base alla proprietà, puoi utilizzare:

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

Questo funzionerebbe quindi per l'utilizzo del modulo:

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

Funzionerà con gli scenari di associazione più comuni.

( modifica )

Per impostare il convertitore per qualsiasi DateTime :

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

Ora il tuo codice di esempio dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top