Itérer sur une Struct?
Je voudrais être en mesure de faire une itération sur les valeurs d'une struct en C# (.Net 2.0). C'est à faire au moment de l'exécution, sans la connaissance des valeurs possibles dans la structure.
Je pensais le long des lignes de l'utilisation de la Réflexion pour ajouter de la structure des valeurs à une liste, ou de la conversion de la structure à une structure de données qui implémente l'interface IEnumerable. Quelqu'un peut-il fournir les pointeurs?
Merci d'avance pour votre aide.
Ce qui concerne,
Andy.
Êtes-vous sûr de r'pas vraiment de sens enum au lieu de struct?. La question sera ont un sens dans ce cas
OriginalL'auteur MagicAndi | 2009-03-19
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez dire - les différents domaines au sein d'une structure? Ou propriétés peut-être? Si oui,
Type.GetFields()
ouType.GetProperties()
est le chemin à parcourir.Êtes-vous absolument sûr que vous devez utiliser une structure, par le chemin? C'est rarement la meilleure décision de conception en C#, en particulier si la structure contient plusieurs valeurs.
EDIT: Oui, il semble que les structures sont utilisées pour des raisons d'héritage.
Une chose que je n'ai pas mentionné avant: si la structure du champs ne sont pas publics, vous aurez besoin de spécifier approprié BindingFlags (par exemple
BindingFlags.Instance | BindingFlags.NonPublic
).Jon, Merci encore. J'ai été en mesure d'effectuer une itération en utilisant le code suivant: Type structType = typeof(MyStruct); FieldInfo[] champs = structType.GetFields(); Foreach(FieldInfo champ dans les champs) { ... }
OriginalL'auteur Jon Skeet
Au niveau le plus simple, en supposant que vous souhaitez effectuer une itération sur les propriétés:
OriginalL'auteur jason
- Je utiliser quelque chose comme ce qui suit:
OriginalL'auteur blfuentes
Pour le faire fonctionner sur tous les struct, vous devez utiliser la réflexion. Si vous souhaitez déclarer un ensemble de structures avec cette capacité, vous pouvez les faire mettre en œuvre
IEnumerable<KeyValuePair<string, object>>
et de définirGetEnumerator()
:OriginalL'auteur Mehrdad Afshari
Voir le
system.de la réflexion.propertyinfo
document pour un exemple de l'utilisation de la Réflexion.OriginalL'auteur gimel