Type List => récupérer nom
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
salut à tous!
Voilà j'ai un petit soucis lors de la résolution de nom donné à un objet dans une classe lors de la lecture via réflexion.
Je m'explique :
J'ai la classe suivante :
Le but étant de connaitre les libellé des attributs, dans mon cas :"laListeDeString".
Je déclare mon objet :
et ensuite, je cherche à partir de mon objet à obtenir ce nom, pour le moment de cette manière :
cependant tout ce que je récupère est :
A noter que je ne donne pas le nom en fait, j'ai une fonction récursive qui récupère les objets.
Sauriez vous comment je peux récupérer ce nom ? cette méhode fonctionne très bien avec des types "classiques", comme pour les string, les classe, int, etc. . Mon problème est donc vis à vis des type génériques.
merci d'avance.
naga
Voilà j'ai un petit soucis lors de la résolution de nom donné à un objet dans une classe lors de la lecture via réflexion.
Je m'explique :
J'ai la classe suivante :
public class cTest
{
public List<string> laListeDeString;
}
Le but étant de connaitre les libellé des attributs, dans mon cas :"laListeDeString".
Je déclare mon objet :
cTest oTest = new cTest();
oTest.laListeDeString = new List<string>();
oTest.laListeDeString.Add("l1");
oTest.laListeDeString.Add("l2");
et ensuite, je cherche à partir de mon objet à obtenir ce nom, pour le moment de cette manière :
Type myType = oTest.laListeDeString.GetType();
string nom = myType.Name ;
cependant tout ce que je récupère est :
List'1
A noter que je ne donne pas le nom en fait, j'ai une fonction récursive qui récupère les objets.
Sauriez vous comment je peux récupérer ce nom ? cette méhode fonctionne très bien avec des types "classiques", comme pour les string, les classe, int, etc. . Mon problème est donc vis à vis des type génériques.
merci d'avance.
naga
A voir également:
- Type List => récupérer nom
- Recuperer message whatsapp supprimé - Guide
- List disk - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment recuperer une video sur youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
1 réponse
'lut, les types génériques ont pour nom court
Si ce format te convient, bien gardes-le ;)
Sinon, tu peux soit le reformater à partir du FullName, soit en combinant
Tout ceci est a faire après une vérification de
[type]'[nombre de types génériques]. Leur nom long, obtenu avec
myType.FullName, en plus de donner tout le chemin de nom d'espace avant le nom du type, donne les types utilisées en paramètres génériques, par exemple, pour un
Dictionary<string, int>, le FullName est
System.Collections.Generic.Dictionary'2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].
Si ce format te convient, bien gardes-le ;)
Sinon, tu peux soit le reformater à partir du FullName, soit en combinant
Nameavec les noms de types données par
myType.GetGenericArguments().
Tout ceci est a faire après une vérification de
myType.IsGenericTypebien sur, car si le type n'est pas générique, les résultats peuvent être inattendus.
du coup j'ai pu faire ma méthode de sérialisation (je te passe les explications de pourquoi je suis amené à le faire moi même ^^), ce qui m'a permis donc de faire cette méthode :
public static string serialise(object o) { string returnValue = ""; Type myType = o.GetType(); returnValue += "<" + myType.Name + " type='"+myType.FullName+"'>"; if (Convert.GetTypeCode(o) != TypeCode.Object) { return "<" + myType.Name + ">" + o.ToString() + "</" + myType.Name + ">"; } foreach (var oField in myType.GetFields()) { Type T = oField.FieldType; FieldInfo fi = myType.GetField(oField.Name); object s = fi.GetValue(o); if (Convert.GetTypeCode(s) != TypeCode.Object) { returnValue += "<" + oField.Name + " type='" + T.FullName + "'>" + s.ToString() + "</" + oField.Name + ">"; } else { if (s is System.Collections.IList) { returnValue += "<" + oField.Name + " type='" + T.FullName + "'>"; foreach (var v in (System.Collections.IList)s) { returnValue += serialise(v); } returnValue += "</" + oField.Name + ">"; } else { returnValue += "<" + oField.Name + " type='" + T.FullName + "'>" + serialise(s) + "</" + oField.Name + ">"; } } } returnValue += "</" + myType.Name + ">"; return returnValue; }bon continuation !
naga