Obtenez tous les domaines de la statique des classes à l'intérieur de classe statique avec réflexion
J'ai une classe statique qui contient beaucoup de classes statiques. Chaque interne statique de la classe contient des champs. Je veux obtenir tous les champs de tous inner classes statiques.
public static class MyClass
{
public static class MyInnerClass1
{
public const string Field1 = "abc";
public const string Field2 = "def";
public const string Field3 = "ghi";
}
public static class MyInnerClass2
{
public const int Field1 = 1;
public const int Field2 = 2;
public const int Field3 = 3;
}
...
}
Je voudrais imprimer le nom de chaque intérieur classe, suivi par le nom et la valeur de chaque champ.
Par exemple:
MyInnerClass
Champ1 = "abc"
...
Je n'ai aucun problème à obtenir le nom de toutes les classes:
var members = typeof(MyClass).GetMembers(BindingFlags.Public | BindingFlags.Static);
var str = "";
foreach (var member in members)
{
str += member.Name +" ";
}
Ou le nom et la valeur de tous les champs dans une classe spécifique:
var fields = typeof(MyClass.MyInnerClass1).GetFields();
foreach (var field in fields)
{
str += field.Name + "-";
str += field.GetValue(typeof(MyClass.MyInnerClass1));
}
Mais comment puis-je combiner cela?
Les noms et le nombre de l'intérieur de classes statiques peuvent changer.
Vous devez vous connecter pour publier un commentaire.
Essayez ce qui suit
L'utilisation de
!type.IsAbstract
est fait pour de mauvaises herbes sur la non-statique les types imbriqués. Un type statique en C# est généré commeabstract
sous le capot.Aussi ma solution va ramasser deux
public
et non-membres du public (les deux types et les champs). Je ne suis pas sûr si c'était votre intention ou non de sorte que vous pouvez modifier qu'une partie de ma solution.Vous avez besoin de manière récursive en boucle
type.GetNestedTypes()
: