Использование Type.IsValueType
:
Получает значение, указывающее, является ли тип типом значения.
Используйте это так:
typeof(Foo).IsValueType
или во время выполнения, например:
fooInstance.GetType().IsValueType
И наоборот, есть также свойство Type.IsClass
(которое, на мой взгляд, должно было называться IsReferenceType
, но неважно), которое может подходить или не подходить для вашего использования в зависимости от того, чем вы являетесь тестирование на.
Кажется, что код всегда читается лучше без логических отрицаний, поэтому используйте любое удобство для чтения вашего кода.
Как указывает Стефан ниже, чтобы правильно определить структуры , вы должны быть осторожны, чтобы избежать ложных срабатываний, когда дело доходит до enums
. enum
является типом значения, поэтому свойство IsValueType
вернет true
для enums
и structs
.
Так что, если вы действительно ищете structs
, а не просто типы значений в целом, вам нужно будет сделать это:
Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;