J'ai ce code que j'adapte actuellement pour utiliser l'entité imbriquée (framework d'entité). J'ai une entité qui contient 2 propriétés qui sont 2 entités enfants.Comment itérer sur un objet T pour trouver une propriété?
La première étape consistait à lire les métadonnées sur les deux classes, à partir des premières classes, en créant une liste de propriétés. Ceci est terminé. Maintenant, j'ai besoin d'itérer sur mon objet pour trouver la bonne propriété pour faire le DataBinding.
C'est ce que j'ai actuellement:
variables Exemple:
datasource = namespace.A
propriete = {System.Nullable`1[System.Int32] count}
propriete.DeclaringType {Name = "prop2" FullName = "Namespace.Metadata.prop2"}
Code:
if (this.datasource != null)
{
var y = (T)this.datasource;
var propList = typeof(T).GetProperties();
if (propList.ToList().Contains(propriete))
{
TextBox.Text = DataBinder.Eval(y, propriete.Name).ToString();
}
else
{
TextBox.Text = ":(need child-support!";
}
}
Mon principal problème est que mon type d'objet est inconnu jusqu'à ce que l'exécution (de type T) donc je n'ai aucune idée sur la façon de trouver mon domaine.
modèle rapide:
Class A {
public B prop1;
public C prop2;
}
Class B {
int count;
string name;
}
Class C {
int count;
string name;
}
A.prop1.count = 1;
A.prop1.name = "a";
A.prop2.count = 2;
A.prop2.name = "b";
En ce moment, mon nom de la propriété sont tous uniques (plus précis que compte/nom), mais je les attendre à être le même (compte/nom) à un moment donné.
propriétaire devra probablement "filtrer" avec DeclaringType/ReflectedType pour un nom non unique.
Une solution de force brute prenant en compte un nom unique, bien que non élégant, pourrait être acceptée.
problème supplémentaire: propriete
utilisation autre classe partielle contient dans l'espace de noms metadata
en datasource
utiliser la classe principale.
(... Et si vous êtes curieux de savoir ce que ce système fait. Il construit une table html (avec des commandes .net) basé sur une entité basée sur cette metadata.entity DataAttribute)
voulez-vous utiliser 'IIterable' au lieu de' T'? –
Voulez-vous dire 'IIterable'? Je ne vois pas comment je pourrais transformer mon type de classe en une liste ... –
Kraz