Enumérer à travers les propriétés d’un object (chaîne) en C #

Disons que j’ai beaucoup d’objects et qu’ils ont beaucoup de propriétés de chaîne.

Existe-t-il une méthode programmatique pour les parcourir et générer le nom de propriété et sa valeur ou doit-il être codé en dur?

Existe-t-il un moyen LINQ d’interroger les propriétés d’un object de type ‘ssortingng’ et de les afficher?

Devez-vous coder en dur les noms de propriété que vous souhaitez faire écho?

Utilisez la reflection. Il est loin d’être aussi rapide que l’access à la propriété codé en dur, mais il fait ce que vous voulez.

La requête suivante génère un type anonyme avec des propriétés Name et Value pour chaque propriété de type chaîne dans l’object ‘myObject’:

var ssortingngPropertyNamesAndValues = myObject.GetType() .GetProperties() .Where(pi => pi.PropertyType == typeof(ssortingng) && pi.GetGetMethod() != null) .Select(pi => new { Name = pi.Name, Value = pi.GetGetMethod().Invoke(myObject, null) }); 

Usage:

 foreach (var pair in ssortingngPropertyNamesAndValues) { Console.WriteLine("Name: {0}", pair.Name); Console.WriteLine("Value: {0}", pair.Value); } 

Vous pouvez obtenir toutes les propriétés d’un type à l’aide de la méthode GetProperties . Vous pouvez ensuite filtrer cette liste à l’aide de la méthode d’extension LINQ Where . Enfin, vous pouvez projeter les propriétés à l’aide de la méthode d’extension LINQ Select ou d’un raccourci pratique comme ToDictionary .

Si vous souhaitez limiter l’énumération aux propriétés de type Ssortingng vous pouvez utiliser ce code:

 IDictionary = myObject.GetType() .GetProperties() .Where(p => p.CanRead && p.PropertyType == typeof(Ssortingng)) .ToDictionary(p => p.Name, p => (Ssortingng) p.GetValue(myObject, null)); 

Cela créera un dictionnaire qui mappe les noms de propriété aux valeurs de propriété. Comme le type de propriété est limité à Ssortingng vous pouvez convertir la valeur de la propriété en Ssortingng et le type du type renvoyé est IDictionary .

Si vous voulez plutôt toutes les propriétés, vous pouvez le faire comme ceci:

 IDictionary = myObject.GetType() .GetProperties() .Where(p => p.CanRead) .ToDictionary(p => p.Name, p => p.GetValue(myObject, null)); 

Vous pouvez utiliser la reflection pour le faire … Il y a un article décent chez CodeGuru , mais cela peut être plus que ce que vous cherchez … vous pouvez en tirer des leçons, puis le réduire à vos besoins.

Si votre but est simplement d’exporter les données stockées dans les propriétés de l’object en utilisant un format lisible, je préfère simplement sérialiser l’object au format JSON.

 using System.Web.Script.Serialization; //... ssortingng output = new JavaScriptSerializer().Serialize(myObject); 

Que diriez-vous quelque chose comme ça?

 public ssortingng Prop1 { get { return dic["Prop1"]; } set { dic["Prop1"] = value; } } public ssortingng Prop2 { get { return dic["Prop2"]; } set { dic["Prop2"] = value; } } private Dictionary dic = new Dictionary(); public IEnumerable> AllProps { get { return dic.GetEnumerator(); } }