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;我无法确定某物是否为基本类型,也无法比较类型以产生相同的效果

任何帮助是极大的赞赏!

4

2 回答 2

4

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

var type = currenField.GetType();
if(type.IsPrimitive)
    // Primitive type
else
    // Other type
于 2012-10-29T19:08:22.273 回答
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;
}
于 2012-10-29T19:37:13.187 回答