Как решить, что Тип является пользовательской структурой?

Для a Type, существует свойство IsClass в C#, но как решить a Type структура?

Хотя IsValueType необходимое условие, это, достаточно очевидно. Для int тип значения также.

Кто-то предлагает следующий код:

bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive;

Но я не уверен, является ли это точным методом. Формула должна сказать различие между структурой и другими типами такой как DateTime, int и arrays.

Поскольку некоторые друзья указали, что здесь, я имею в виду определяемую пользователем структуру и не предварительно определенные типы, такой как DateTime.

16
задан nawfal 19 April 2013 в 22:02
поделиться

1 ответ

Технически int также является структурой. IsPrimitive просто проверяет, является ли тип одним из примитивных типов, с которыми среда CLR обрабатывает несколько иначе. Вас должно устроить предложение IsValueType &&! IsEnum &&! IsPrimitive .

Если вам нужны только пользовательские структуры (то есть те, которые не поставляются BCL), вам может повезти, исключив типы с FullName, начинающимся с «System.» , или включив только те, которые вы интересует фильтрация по сборке или пространству имен, или использовать настраиваемый атрибут.

9
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: