Для a Type
, существует свойство IsClass
в C#, но как решить a Type
структура?
Хотя IsValueType
необходимое условие, это, достаточно очевидно. Для int
тип значения также.
Кто-то предлагает следующий код:
bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive;
Но я не уверен, является ли это точным методом. Формула должна сказать различие между структурой и другими типами такой как DateTime
, int
и array
s.
Поскольку некоторые друзья указали, что здесь, я имею в виду определяемую пользователем структуру и не предварительно определенные типы, такой как DateTime
.
Технически int также является структурой. IsPrimitive просто проверяет, является ли тип одним из примитивных типов, с которыми среда CLR обрабатывает несколько иначе. Вас должно устроить предложение IsValueType &&! IsEnum &&! IsPrimitive
.
Если вам нужны только пользовательские структуры (то есть те, которые не поставляются BCL), вам может повезти, исключив типы с FullName, начинающимся с «System.»
, или включив только те, которые вы интересует фильтрация по сборке или пространству имен, или использовать настраиваемый атрибут.