用reflection检测原生物体

我正在使用基于reflection的对象转换器。

它基本上循环遍历对象的属性,并将值分配给已翻译对象上具有相同名称/类型的属性。

ObjectA.Name =“Joe”

翻译为:

ObjectB.Name =“Joe”

我需要设置一个特殊情况,因为当属性是自定义类时,例如:

ObjectA.Address

我希望我能用PropertyType的IsClass标志检测这些属性

propInfo.PropertyType.IsClass 

但是对于字符串属性,此标志似乎也返回true。

还有另一种方法可以validation该属性是非本机类型吗?

我假设你想确定目标类型是不是主要的。 你可以使用TypeCode ,例如:

 public bool IsNotCoreType(Type type) { return (type != typeof(object) && Type.GetTypeCode(type) == TypeCode.Object); } 

任何非原语都应该返回TypeCode.Object作为Type.GetTypeCode的结果,因此我们可以检查我们是否得到它,并且类型本身不是System.Object

也许这会有所帮助?

更新 :我已将方法重命名为IsNotCoreType以涵盖基元和非基元,如StringDateTime等(请参阅下面的注释)。

string是一个例外,是.NET中唯一的基本类型,它是一个引用类型。 您必须在代码中考虑此exception,以便检查IsClass是否为true且类型与System.String