Salut,
Pour info, GetFields retour les variables de classes qui sont public. Donc si elles sont private, ça marchera pas comme ça...
Ensuite, tu cherches bien les variables de classes? pas les Properties?
Pour les Properties, ça donnerait quelques chose comme ceci (similaire pour les variables de classes) :
Type type = c.GetType();
PropertyInfo[] fi = type.GetProperties();
foreach (PropertyInfo f in fi)
{
if (f.PropertyType == typeof(BindingList<XXX>))
{
}
}
C'est bien les Fields donc les variables publiques que je recherche !
Malheuresement je ne peut pas utiliser le test de type que tu me propose car je ne connais pas le type des éléments dans les bidinglists. J'ai essayé la méthodes assignableFrom. Je m'y prend peut-être comme un manche ..
Je suis d'accord pour tout ton code mais comment tester que j'ai au moins une bidinglist qui pourrait être caster en BidingList<Object> et pouvoir la parcourir ..
Pour info:
En C# 3.5 et inférieur, on ne peut pas convertir IEnumerable<XXXX> en IEnumerable<object>
En C# 4.0 par contre, la covariance a été implémentée et la conversion est donc possible.
Pour ton problème:
Je ne sais pas trop... je peux te donner une solution temporaire:
Type type = c.GetType();
FieldInfo[] fi = type.GetFields();
foreach (
FieldInfo f
in fi)
{
bool x f.FieldType.UnderlyingSystemType.Name "BindingList`1";
}
Mais je dirais que ça ressemble plus à du bricolage qu'autre chose...
Y'a probablement un moyen plus propre de faire ça !?
Je suis arrivé à ceci... C'est tout sauf sexy ... :( tout sauf reflexif comme je voudrais
Type type = o.GetType();
PropertyInfo[] fi = type.GetProperties();
foreach(PropertyInfo f in fi)
{
if(f.PropertyType.ToString().Contains("BindingList"))
{
Object unknowList = f.GetValue(o, null);
if(unknowList is BindingList<XXX>)
{
BindingList<XXX> listNiv = (BindingList<XXX>)unknowList;
foreach(Niveau n in listNiv)
{
DoWork();
}
}
}
}