سؤال

توفر فئة DateTimeConverter التحويلات بين DateTime والسلسلة.أود أيضًا دعم التحويلات بين 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));

شكرًا.

هل كانت مفيدة؟

المحلول

تحتاج إلى تخصيص المحول.على أساس كل عقار على حدة، يمكنك استخدام:

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

الآن يجب أن يعمل نموذج التعليمات البرمجية الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top