2009-09-30 9 views
0

Je dois convertir à partir d'une chaîne qui contient des données en un objet de quel type qui est passé en utilisant la réflexion. J'ai un objet non sérialisable qui contient des propriétés de tout type, et je veux charger des données à cet objet. Par exemple, cet objet a la propriété Color BgColor. Lorsque j'essaie de définir la valeur "Rouge" sur cette propriété, j'obtiens que la conversion n'est pas possible de la chaîne à la couleur. J'ai besoin de code général.Comment convertir une chaîne de caractères à un objet de n'importe quel type?

Répondre

0

Essayez Convert.ChangeType pour les conversions générales.

Mais dans votre cas, je pense que la méthode Color.FromName serait le mieux:

crée une structure de couleur du nom spécifié d'une couleur prédéfinie.

+0

Non, malheureusement, je sais à ce sujet, et il ne suffit pas, peut-il convertir 120 à System.Web.UI.WebControls.Unit par exemple? en XML j'ai une chaîne et le type de propriété width est l'unité –

+0

Existe-t-il une méthode générale? Ou je devrais utiliser l'interrupteur ou essayer de trouver la méthode d'analyse par réflexion? –

0

Si tout ce que vous devez faire est de convertir une chaîne à sa valeur dans un enum, vous pouvez utiliser un code similaire à ce qui suit:

public static T ToEnum<T>(this string original) 
{ 
    Array values = Enum.GetValues(typeof(T)); 

    foreach (T value in values) 
    { 
     if (value.ToString().ToUpperInvariant() == original.ToUpperInvariant()) 
      return value; 
    } 

    throw new NotFoundException(); 
} 

Si vous avez besoin de convertir d'autres types, alors peut-être préciser types et les formats de la chaîne peuvent aider les gens à mieux vous diriger.

+0

le type de propriété n'est pas toujours une énumération, je charge les contrôles ASP.NET de xml et je veux définir toutes les propriétés de contrôle à partir des valeurs xml, mais ASP.NET convertit en quelque sorte 129 px en UNit type, dans mon cas j'obtiens une erreur –

Questions connexes