我希望能够看到一个对象是否是基类型(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 :(得分: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;
}