2013-04-24 14 views
6

Mit TypeConverter.ConvertFromString(), ich brauche ein benutzerdefiniertes Format zu liefern, wenn Daten aus einem String-Parsing (zum Beispiel mit DateTime: "ddMMyyyy" oder "MMMM dd, yyyy").Parsing-Strings in benutzerdefinierten Formaten TypeConverter.ConvertFromString()

TypeConverter.ConvertFromString() hat die folgende Überlast:

public object ConvertFromString(ITypeDescriptorContext context, 
           CultureInfo culture, 
           string text); 

ich auf MSDN über ITypeDescriptorContext up geprüft.

Die ITypeDescriptorContext-Schnittstelle bietet Kontextinformationen über eine Komponente. ITypeDescriptorContext wird normalerweise in Entwurfszeit verwendet, um Informationen zu einem Entwurfszeitcontainer bereitzustellen. Diese Schnittstelle wird häufig bei der Typkonvertierung verwendet.

Das klingt wie das, was ich brauche, aber ich kann keine Beispiele nirgendwo finden.

ich die folgende generische Methode verwende:

public T ParseValue<T>(string value) 
{ 
    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value); 
} 

Beispiel Telefonvorwahl:

DateTime date = ParseValue<DateTime>("02062001"); 
decimal amount = ParseValue<decimal>("1.3423"); 

ich eine Art generische Formatierung Informationen in dieser ParseValue() Methode in der Lage sein zu analysieren, die sein kann, verwendet von ConvertFromString().

+0

@ Bob- Weil ich manchmal von einem String zu anderen Datentypen (nicht nur 'DateTime') analysieren werde. Ich brauche 'TypeDescriptor', damit ich zur Laufzeit den passenden Parsing-Mechanismus bekomme. – davenewza

+0

Ich bin verwirrt, möchten Sie eine DateTime, die als String dargestellt wird, in andere Datentypen konvertieren? So wie zu einem int? –

+0

@ Bob- Ich habe meinen Beitrag mit mehr Codebeispielen bearbeitet. Danke – davenewza

Antwort

2

Sie können eine benutzerdefinierte CultureInfo erstellen, die Ihr Format enthält.

Eine andere Lösung wäre Umbrechen Konvertierung in einer Hilfsmethode, die DateTime.Parse für Datumsangaben und TypeConverter für andere Typen verwenden würde.

+0

Ich habe das berücksichtigt (ich müsste auch Zahlenformate angeben, wenn Dezimalzahlen, Negative usw. analysiert werden), aber es scheint ein Overkill zu sein, ein dummy CultureInfo-Objekt zu erstellen und nur einige relevante Eigenschaften zu überschreiben. Und was ist eigentlich "ITypeDescriptorContext"? Danke für die Antwort :) – davenewza

Verwandte Themen