Есть ли способ получить список внутренних классов в C #? - PullRequest
25 голосов
/ 06 апреля 2011

согласно названию. Я хотел бы список всех внутренних классов данного класса, это может быть список имен или список типов - я не смущен. Это возможно? Я думал, что может быть способ использовать отражение, но я не смог его найти.

Большое спасибо, Thomas

Ответы [ 5 ]

37 голосов
/ 06 апреля 2011

Вы хотите Type.GetNestedTypes . Это даст вам список типов, которые вы можете запросить для их имен.

9 голосов
/ 06 апреля 2011

Не Type.GetNestedTypes делает то, что вы хотите?

Обратите внимание, что если вы хотите получить типы с "двойным вложением", вам необходимо выполнить рекурсивный анализ, поскольку Foo.Bar.Baz - это вложенный тип в Foo.Bar, а не в Foo.

Для "современных" сред (.NET 4.5, PCL, UWA и т. Д.) Вместо этого вам нужно TypeInfo.DeclaredNestedTypes, например, type.GetTypeInfo().DeclaredNestedTypes, используя метод расширения GetTypeInfo() .

3 голосов
/ 06 апреля 2011

Type.GetNestedTypes () вернет открытые вложенные типы указанного типа.

Если вам также нужны закрытый и внутренний вложенные типы, вы должны вызвать метод Type.GetNestedTypes (BindingFlags bindingFlags) , например:

Type[] nestedTypes = typeof(MyType).GetNestedTypes(BindingFlags.Static |
                                                   BindingFlags.Instance |
                                                   BindingFlags.Public |
                                                   BindingFlags.NonPublic);
3 голосов
/ 06 апреля 2011
Type[] nested = typeof(SomeClass).GetNestedTypes();
2 голосов
/ 06 апреля 2011

Да, есть.Используйте Type.GetNestedTypes().

...