You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断FieldInfo是自定义类对象还是基础数据类型?

区分自定义类与基础数据类型,遍历字段执行不同逻辑

需求场景

遍历对象字段时,针对自定义类类型的字段执行逻辑A,针对string、int这类基础数据类型的字段执行逻辑B。

示例类结构:

public class Foo
{
   public string FooName { get; set; }
   public int FooThing { get; set; }
   public Bar BarLevel { get; set; }            
}

public class Bar
{
    public string BarName { get; set; }
    public string BarSomething { get; set; }
    public string BarYoda { get; set; }
}

期望效果:遍历Foo的字段时,BarLevel执行逻辑A,FooName、FooThing执行逻辑B。

最初尝试的问题

一开始使用FieldType.IsClass属性判断类型,但发现该属性对int、bool等值类型也返回true,导致逻辑判断错误。错误代码如下:

FieldInfo[] fieldInfoList = fooObj.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo f in fieldInfoList)
{
   if (f.FieldType.IsClass)
   {
      //do something A
   }
   else
   {
       //do something B
   }
}

问题根源是对类型分类的误解——比如string本身就是引用类型(类),所以IsClass无法区分自定义类和这些特殊的基础类型。

最终解决方案

通过直接指定需要排除的基础数据类型来区分,代码如下:

if (f.FieldType != typeof(string) && f.FieldType != typeof(int))
{
   //do something A
}
else
{
   //do something B
}

内容的提问来源于stack exchange,提问作者Vereonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:15:39