Этот вопрос уже имеет ответы здесь :
Закрытый 6 лет назад .
Как записать простой метод, который проверяет, является ли конкретный тип пользовательской структурой (созданный с public struct { };
) или нет.
Проверка Type.IsValueType
недостаточно, потому что это также верно для int
, long
, и т.д. и добавление проверки к !IsPrimitiveType
не исключит decimal
, DateTime
и возможно некоторые другие типы значения. Я знаю, что большинство созданных в типах значения является на самом деле "структурами", но я только хочу проверить на "пользовательские структуры"
Этими вопросами является главным образом то же, но без ответа мне нужно:
Править: из ответов упомянул, что "проверка на 'Системный' префикс" была самой стабильной (хотя это - все еще взлом). Я наконец решил создать Атрибут, что необходимо украсить структуру в порядке платформа для собирания его как пользовательской структуры. (Другой выбор, я думал, состоял в том, чтобы создать пустой интерфейс и позволить реализации структуры, что пустой интерфейс, но атрибут путь казался более изящным),
Вот мое исходное пользовательское средство проверки структуры если кто-то, если заинтересовано:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum