Comment obtenir une liste de toutes les propriétés d'une classe?Comment obtenir la liste des propriétés d'une classe?
Répondre
Réflexion; pour une instance:
obj.GetType().GetProperties();
pour un type:
typeof(Foo).GetProperties();
par exemple:
class Foo {
public int A {get;set;}
public string B {get;set;}
}
...
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));
}
commentaires ... Après
- Pour obtenir le val ue de propriétés statiques, passez
null
comme premier argument àGetValue
- Pour rechercher des propriétés non publiques, utilisez (par exemple)
GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
(qui renvoie toutes les propriétés d'instance publiques/privées).
Pour être complet, il y a aussi la ComponentModel, exposée par TypeDescriptor.GetProperties (...) - qui permet des propriétés d'exécution dynamique (réflexion est fixé à compile- temps). –
Suggestion: Développez la réponse pour couvrir les propriétés protected/private/static/inherited. – Richard
L'instruction foreach que vous affichez fonctionne même dans la classe pour laquelle vous souhaitez obtenir les propriétés de :) –
Vous pouvez utiliser la réflexion.
Type typeOfMyObject = myObject.GetType();
PropertyInfo[] properties =typeOfMyObject.GetProperties();
Vous pouvez utiliser Réflexion pour ce faire: (de ma bibliothèque - ce obtient les noms et les valeurs)
public static Dictionary<string, object> DictionaryFromType(object atype)
{
if (atype == null) return new Dictionary<string, object>();
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
object value = prp.GetValue(atype, new object[]{});
dict.Add(prp.Name, value);
}
return dict;
}
Cette chose ne fonctionne pas pour les propriétés avec un indice - pour que (il devient difficile à manier):
public static Dictionary<string, object> DictionaryFromType(object atype,
Dictionary<string, object[]> indexers)
{
/* replace GetValue() call above with: */
object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}
de plus, pour obtenir seulement des propriétés publiques: (see MSDN on BindingFlags enum)
/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)
Cela fonctionne aussi sur les types anonymes!
obtenir juste les noms:
public static string[] PropertiesFromType(object atype)
{
if (atype == null) return new string[] {};
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
List<string> propNames = new List<string>();
foreach (PropertyInfo prp in props)
{
propNames.Add(prp.Name);
}
return propNames.ToArray();
}
Et il est à peu près la même chose pour seulement les valeurs, ou vous pouvez utiliser:
GetDictionaryFromType().Keys
// or
GetDictionaryFromType().Values
Mais c'est un peu plus lent, j'imagine.
... mais atype.GetProperty (prp.Name) va retourner prp? –
Oh - tu as raison! D'oh. –
Je l'ai réparé maintenant. –
Vous pouvez utiliser l'espace de noms System.Reflection
avec le Type.GetProperties()
mehod:
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public|BindingFlags.Static);
Je suis également confronté à ce genre d'exigence.
De cette discussion, je suis une autre idée,
Obj.GetType().GetProperties()[0].Name
Cette montre également le nom de la propriété.
Obj.GetType().GetProperties().Count();
ce nombre de propriétés.
Merci à tous.C'est une bonne discussion.
public List<string> GetPropertiesNameOfClass(object pObject)
{
List<string> propertyList = new List<string>();
if (pObject != null)
{
foreach (var prop in pObject.GetType().GetProperties())
{
propertyList.Add(prop.Name);
}
}
return propertyList;
}
Cette fonction permet d'obtenir la liste des propriétés de classe.
Vous pourriez vouloir changer cela pour utiliser 'return return'. Ce n'est pas une grosse affaire, mais c'est une meilleure façon de le faire. –
J'aime ça parce que c'est (presque) la seule réponse qui n'inclut pas le mot * réflexion *. –
Mais cela ** utilise encore ** la réflexion néanmoins. – GGG
C'est ma solution
public class MyObject
{
public string value1 { get; set; }
public string value2 { get; set; }
public PropertyInfo[] GetProperties()
{
try
{
return this.GetType().GetProperties();
}
catch (Exception ex)
{
throw ex;
}
}
public PropertyInfo GetByParameterName(string ParameterName)
{
try
{
return this.GetType().GetProperties().FirstOrDefault(x => x.Name == ParameterName);
}
catch (Exception ex)
{
throw ex;
}
}
public static MyObject SetValue(MyObject obj, string parameterName,object parameterValue)
{
try
{
obj.GetType().GetProperties().FirstOrDefault(x => x.Name == parameterName).SetValue(obj, parameterValue);
return obj;
}
catch (Exception ex)
{
throw ex;
}
}
}
Voici amélioré @lucasjones répondre. J'ai inclus les améliorations mentionnées dans la section des commentaires après sa réponse. J'espère que quelqu'un trouvera cela utile.
public static string[] GetTypePropertyNames(object classObject, BindingFlags bindingFlags)
{
if (classObject == null)
{
throw new ArgumentNullException(nameof(classObject));
}
var type = classObject.GetType();
var propertyInfos = type.GetProperties(bindingFlags);
return propertyInfos.Select(propertyInfo => propertyInfo.Name).ToArray();
}
Basé sur la réponse de @ MarcGravell, voici une version qui fonctionne dans Unity C#.
ObjectsClass foo = this;
foreach(var prop in foo.GetType().GetProperties()) {
Debug.Log("{0}={1}, " + prop.Name + ", " + prop.GetValue(foo, null));
}
- 1. JScript recenseur et la liste des propriétés
- 2. Extension de la classe de chaînes avec des propriétés?
- 3. Comment puis-je obtenir la liste des propriétés dans un objet dans Actionscript?
- 4. Obtenir la liste des méthodes de classe pour une classe arbitraire
- 5. Comment obtenir des propriétés Les noms des paramètres d'objet?
- 6. Liaison Wpf à la classe avec des propriétés inconnues Nombre
- 7. IIS 6.0 Liste des propriétés DirectoryEntry
- 8. XQuery pour obtenir la liste des attributs
- 9. PHP extension des propriétés de classe
- 10. Obtenir des propriétés d'image avec Jython
- 11. Utilisation interne de classe des propriétés publiques
- 12. Comment obtenir une liste des sessions Windows?
- 13. Comment obtenir des informations sur la classe et l'exécution?
- 14. Sérialisation personnalisée des propriétés de la classe de base
- 15. Comment obtenir la liste des URL pour un domaine
- 16. Comment obtenir la liste des fenêtres ouvertes de xserver
- 17. Comment obtenir la liste des rôles pour l'utilisateur actuellement connecté
- 18. Comment obtenir la liste des clés dans un dictionnaire?
- 19. Comment obtenir la liste des disques amovibles dans C#?
- 20. MySQL: comment obtenir la liste des tables en utilisant ODBC
- 21. Liste des propriétés intégrées de l'objet
- 22. lecture seule liste avec des propriétés automatiques
- 23. Utilisation des propriétés de liste déroulante dans C# NET 3.5
- 24. Obtenir la liste des champs dans la structure
- 25. Comment obtenir le fuseau horaire des propriétés dans CultureInfo
- 26. Comment obtenir le nom de la classe
- 27. Comment puis-je obtenir une liste des dépendances de classes Java pour une classe principale?
- 28. Comment parcourir toutes les propriétés d'une classe?
- 29. Comment obtenir les propriétés d'un objet en utilisant la réflexion?
- 30. obtenir la liste des enfants dans SimpleXMLElement PHP
@Sukesh, s'il vous plaît marquer l'une des réponses que la réponse – K48