Comment puis-je conserver toutes les propriétés d'une classe dans un tableau d'objets?

StackOverflow https://stackoverflow.com/questions/2522069

  •  22-09-2019
  •  | 
  •  

Question

Disons que j'ai une classe myClass qui a quelques propriétés, telles que property1 , property2, perperty3, , etc. Maintenant, je souhaitez remplir un tableau avec chacune de ces propriétés de sorte que, je peux accéder à chacun d'eux par son indice. Est-il un moyen automatique de le faire?

Voici un exemple de SportsStore (Pro ASPN.NET MVC / Steve Sanderson / Apress) sur la façon de recueillir tous les contrôleurs actifs dans le 'l'Assemblée'.

 var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
 where typeof(IController).IsAssignableFrom(t) 
 select t; 

 foreach(Type t in controllerTypes)
    //Do something

Je me demande s'il y a quelque chose comme celle-ci que je peux utiliser pour recueillir (seulement) les propriétés d'une classe et de les stocker dans un tableau, peu importe la valeur du type de chacun (int, string ou type personnalisé)

J'espère que j'ai pu me exprimer clairement. Sinon, je peux modifier le texte.

Merci de votre aide.

Était-ce utile?

La solution

Type.GetProperties () méthode d'aide?

Autres conseils

Vous pouvez utiliser la réflexion:

var foo = new
{
    Prop1 = "prop1",
    Prop2 = 1,
    Prop3 = DateTime.Now
};

var properties = TypeDescriptor.GetProperties(foo.GetType());
var list = new ArrayList();
foreach (PropertyDescriptor property in properties)
{
    var value = property.GetValue(foo);
    list.Add(value);
}

et la version LINQ qui ressemble mieux à l'oeil:

var list = TypeDescriptor
    .GetProperties(foo.GetType())
    .Cast<PropertyDescriptor>()
    .Select(x => x.GetValue(foo))
    .ToArray();

Je suis de ce :

foreach(Type t in controllerTypes)
{
  foreach (MemberInfo mi in t.GetMembers() )
  {
    if (mi.MemberType==MemberTypes.Property)
    {
      // If the member is a property, display information about the property's accessor methods
      foreach ( MethodInfo am in ((PropertyInfo) mi).GetAccessors() )
      {
        // do something with [am]
      }
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top