Comment puis-je trouver tous les champs publics d'un objet en C #?
Je suis de la construction d'une méthode à prendre dans une liste de tableaux(sans doute plein d'objets) et puis la liste de tous les champs(et leurs valeurs) pour chaque objet dans la liste de tableaux.
Actuellement mon code est comme suit:
public static void ListArrayListMembers(ArrayList list)
{
foreach (Object obj in list)
{
Type type = obj.GetType();
string field = type.GetFields().ToString();
Console.WriteLine(field);
}
}
Bien sûr, je comprends la question immédiate avec le code: si cela a fonctionné, il avait seulement l'impression d'un champ par objet dans la liste de tableaux. Je vais corriger cela plus tard - droit maintenant, je suis juste curieux de savoir comment obtenir tous les champs publics associés à un objet.
EDIT: Désolé pour les volte-face des réponses tellement. Je devrais avoir essayé toutes les méthodes avant de choisir une réponse.
source d'informationauteur junkforce
Vous devez vous connecter pour publier un commentaire.
Notez que ce code exige .NET 3.5 à travailler 😉
Vous pouvez obtenir tous les Champs d'objet déclaré directement dans la classe avec le BindingFlags:
et tous les Champs d'objet, y compris hérité avec:
Je tiens à mentionner que la recherche de IsPublic dans les champs n'est pas nécessaire que le type.GetFields() tel que défini par MSDN états:
Valeur De Retour -
Type: System.De la réflexion.FieldInfo[]
Un tableau de FieldInfo objets représentant tous les champs publics défini pour le Type de courant.
Bien sûr, l'autre question serait: "pourquoi avez-vous obtenu des champs publics?" - propriétés étant préférable. Comme une abstraction, notez que la réflexion n'est pas la seule option: il est également possible pour un type d'exposer ses propriétés à la volée lors de l'exécution (comme la façon dont un non
DataTable
/DataView
expose les colonnes de propriétés).À l'appui de cette (tout en soutenant simples objets de), vous devez utiliser
TypeDescriptor
:Cela permet également de nombreuses options d'extensibilité - par exemple, très accélérer la réflexion (sans modification du code).