문제

DateTimeConverter 클래스는 DateTime과 String 간의 전환을 제공합니다. 또한 DateTime과 Double 간의 전환을 지원하고 싶습니다.

MSDN에 따르면이 작업을 수행하려면 DateTimeConverter 클래스를 확장 할 수 있습니다. MSDN DATETIMECONVERTER

DateTimeConverter에서 상속되는 클래스를 만들었고 Canconvertto, Canconvertfrom 등에 적절한 재정의를 제공합니다.

아래 코드가 호출 될 때 Framework가 BCL (DateMeconVerter) 대신 DateTime Converter (DateTimeConverex)를 사용하는지 확인하려면 어떻게해야합니까?

    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