Как определить, является ли Type структурой? - PullRequest
7 голосов
/ 01 февраля 2010

Учитывая экземпляр PropertyInfo, который имеет свойство Type, как определить, является ли он структурой? Я обнаружил, что есть свойства, такие как IsPrimitive, IsInterface и т. Д., Но я не уверен, как запросить структуру?

EDIT: Уточнить вопрос. Предположим, у меня есть метод:

public Boolean Check(PropertyInfo pi)
{
   return pi.Type.IsStruct;
}

Что я пишу вместо IsStruct?

Ответы [ 3 ]

11 голосов
/ 01 февраля 2010

Type.IsValueType должен сделать свое дело.

(сжато от здесь )

1 голос
/ 20 апреля 2013

Структуры и перечисления (IsEnum) подпадают под расширенный набор, называемый типом значений (IsValueType). Примитивные типы (IsPrimitive) являются подмножеством структуры. Это означает, что все примитивные типы являются структурами, но не наоборот; Например, int является примитивным типом, а также структурой, но decimal является только структурой, а не примитивным типом.

Итак, вы видите единственное отсутствующее свойство - это свойство struct. Легко написать один:

public bool IsStruct(this Type type)
{
   return type.IsValueType && !type.IsEnum;
}
1 голос
/ 09 сентября 2010

добавление комментариев к ответу Энтони Коха в метод расширения:

public static class ReflectionExtensions {
        public static bool IsCustomValueType(this Type type) {            
               return type.IsValueType && !type.IsPrimitive && type.Namespace != null && !type.Namespace.StartsWith("System.");
        }
    }

должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...