检查对象是否为非basetype?

时间:2012-10-29 19:06:29

标签: c#

我希望能够看到一个对象是否是基类型(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;我无法确定某些东西是否是基本类型,也无法比较类型以产生相同的效果

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

您所指的“基本类型”实际上被视为原始类型。您可以使用IsPrimitive属性确定类型是否为原始类型:

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

答案 1 :(得分: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;
}