Vous pouvez le faire avec reflection :
// Obtenir une liste de propriétés de type chaîne de caractères
var stringProps = OS_Result
.OSResultStruct
.GetType()
.GetProperties()
.Where(p => p.PropertyType == typeof(string));
foreach (var prop in stringProps) {
// Utiliser l'objet PropertyInfo pour extraire la valeur correspondante
// de l'objet OS_Result.OSResultStruct
string val = (string)prop.GetValue(OS_Result.OSResultStruct);
...
}
[EDIT by [Matthew Watson]](https://stackoverflow.com/users/106159/matthew-watson) J'ai pris la liberté d'ajouter un autre exemple de code, basé sur le code ci-dessus.
Vous pourriez généraliser la solution en écrivant une méthode qui renverra un IEnumerable
pour n'importe quel type d'objet :
public static IEnumerable> StringProperties(object obj)
{
return from p in obj.GetType().GetProperties()
where p.PropertyType == typeof(string)
select new KeyValuePair(p.Name, (string)p.GetValue(obj));
}
Et vous pouvez généraliser encore plus avec des génériques :
public static IEnumerable> PropertiesOfType(object obj)
{
return from p in obj.GetType().GetProperties()
where p.PropertyType == typeof(T)
select new KeyValuePair(p.Name, (T)p.GetValue(obj));
}
En utilisant cette deuxième forme, pour parcourir toutes les propriétés de chaîne de caractères d'un objet, vous pourriez faire :
foreach (var property in PropertiesOfType(myObject)) {
var name = property.Key;
var val = property.Value;
...
}