[C#] Conversion dynamique de type

Bonjour à tous,
voici mon souci :
j’ai un fichier xml comme ceci :

et j’aurai besoin de convertir dynamiquement le “Green” en System.Drawing.Color.
Suis-je obligé de me taper une méthode testant tous les types possibles genre :

[code]private object convertType(string data, Type type)
{
if (type == typeof(bool))
return bool.Parse(data);

if (type == typeof(System.Drawing.Color))
  return Color.FromName(data);

if (type.IsEnum == false)
  return System.Enum.Parse(type, data, true);

if (type == typeof(int))
  return System.Int32.Parse(data);

return data;
}[/code]

le but est d’appliquer une propriété à un control :

control.GetType() .GetProperty(property.Name) .SetValue(control, property.Value, null);

ou bien y a-t-il une autre solution ? (construire un type à la volée ?)

Merci !!!

Sauf erreur, t’as Activator qui peut te faire ça.

Oups… lecture un peu rapide… J’avais mal compris… Mais y’a peut-etre des pistes autours de ça…

Mes excuses dominicales :smiley:

T’as pas le design pattern “Double Dispatch” qui fait ca ?

Tu connais l’ensemble des types possible à l’avance ?

Prends ton reflector, et va voir comment est faite la serialization/deserialization des fichier ressources (resx) dans .Net. Tu peux commencer par resgen.exe

Bien reçu, je vais jeter un oeil !!

Merci :smiley:

La plupart des classes du Framework ayant une representation textuelle (couleur, geometries, path WPF…) ont un TypeConverter associe, qui permet de faire des conversion string<=>objet. (sous reflector, tu peux voir que Color a un TypeConverter associe via l’attribut TypeConverterAttribute par exemple).

Pour recuperer le typeconverter associe a un type il faut passer par son TypeDescriptor. Ainsi on obtient:

TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("#ff00ffff")

pour une couleur GDI+ par exemple.

Pfff girafologue il spoil, et la balise spoiler alors! :smiley: