如何判断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
相关产品推荐
相关产品推荐

