Начну с того, что я отрабатываю предположение, что инициализаторы статических массивов превращаются компилятором в частные вложенные классы, обычно с именами, такими как __StaticArrayInitTypeSize=12
. Насколько я понимаю, прочитав эту чрезвычайно информативную статью , эти частные классы являются типами значений и не помечены CompilerGeneratedAttribute
классом.
Я работаю над проектом, который должен обрабатывать определенные типы и игнорировать другие.
Я должен иметь возможность обрабатывать пользовательские типы структур, которые, как и сгенерированные классы инициализатора статического массива, являются типами значений. Я должен игнорировать сгенерированные классы инициализатора статического массива. Я также должен игнорировать перечисления и делегаты.
Я вытягиваю эти классы с Linq, вот так:
var typesToProcess = allTypes.Where(type => !type.IsEnum &&
!type.IsArray &&
!type.IsSubclassOf(typeof(Delegate)));
Я совершенно уверен, что свойство IsArray
не то, что я думаю. В любом случае, сгенерированный класс инициализатора статического массива по-прежнему отображается в typesToProcess
Enumerable.
Кто-нибудь еще имел дело с этим? Как я могу различить разницу между пользовательской структурой и классом инициализатора статического массива? Я могу взломать его, сравнив имя типа с __StaticArrayInitTypeSize
, но есть ли более чистое решение?