2012-10-29 2 views
0

Я хочу, чтобы узнать, имеет ли объект базовый тип (char, int, var, string (это базовый тип в C#?)). Причина этого заключается в том, что я хочу создать парсер, который получает поля объекта, и если он встречается с объектом, он не может получить значение из (если это был другой объект внутри), он будет рекурсивно получать поля там тоже. Так, например:Проверьте, не является ли объект не базовым типом?

for (int x = 0; x < elements.Length; x++) 
    { 
     FieldInfo currenField = fields[x]; 

     if (currenField is object) //This doesn't work because its of type "FieldInfo" 
     { 
      //pass in the current object into the function 
     } 
     else 
     { 
      elements[x] = new XElement(currenField.Name, currenField.GetValue(obj).ToString()); 
     } 

К сожалению, я не могу найти что-либо в Интернете, это позволит вам легко определить, есть ли его базовый тип. Не возможно также следующее:

 currenField.GetType is typeof(object) 

TLDR; Я не могу определить, является ли что-то базовым или нет, и я не могу сравнивать типы для получения того же эффекта.

Любая помощь очень ценится!

+0

Для того чтобы мы могли ответить на ваш вопрос, сначала вам нужно объяснить, что вы подразумеваете под «базовым типом». Это не стандартный термин. –

+0

Может быть, базовый тип? – rekire

+0

Правильно, я почему-то положил это, а потом изменил его. Его базовый тип вы правы. –

ответ

4

То, что вы называете «базовыми типами», на самом деле считаются примитивными типами. Вы можете определить, является ли тип примитивного типа, используя IsPrimitive свойства:

var type = currenField.GetType(); 
if(type.IsPrimitive) 
    // Primitive type 
else 
    // Other type 
+0

Кажется, что ОП пытается сериализовать свои данные; в этом случае это не имеет особого значения. – Servy

+0

+1 Скорее всего, это был OP. Однако следует отметить, что может быть несколько типов, которые могут быть проанализированы, но не покрыты условием «IsPrimitive» (например, «DateTime»). – GolfWolf

+0

@Servy - Если, конечно, OP не хочет писать свой собственный код сериализации (как упражнение и т. Д.) –

0

Обычно IsPrimitive достаточно, но если вам нужна дополнительная информация, я бы рекомендовал Type.GetTypeCode().

var typeCode = Type.GetTypeCode(currenField.GetType()); 

switch (typeCode) 
{ 
    case TypeCode.Boolean: 
     break; 
    case TypeCode.Byte: 
     break; 
    case TypeCode.Char: 
     break; 
    case TypeCode.DBNull: 
     break; 
    case TypeCode.DateTime: 
     break; 
    case TypeCode.Decimal: 
     break; 
    case TypeCode.Double: 
     break; 
    case TypeCode.Empty: 
     break; 
    case TypeCode.Int16: 
     break; 
    case TypeCode.Int32: 
     break; 
    case TypeCode.Int64: 
     break; 
    case TypeCode.Object: 
     break; 
    case TypeCode.SByte: 
     break; 
    case TypeCode.Single: 
     break; 
    case TypeCode.String: 
     break; 
    case TypeCode.UInt16: 
     break; 
    case TypeCode.UInt32: 
     break; 
    case TypeCode.UInt64: 
     break; 
    default: 
     break; 
} 
Смежные вопросы