我正在使用基于反射的对象转换器。
它基本上循环遍历对象的属性,并将值分配给已翻译对象上具有相同名称/类型的属性。
ObjectA.Name =“Joe”
转换为:
ObjectB.Name =“Joe”
我需要提一个特例,因为当属性是自定义类时,例如:
ObjectA.Address
我希望我能用PropertyType
的IsClass标志来检测这些属性propInfo.PropertyType.IsClass
但是对于字符串属性,此标志似乎也返回true。
还有另一种方法可以验证该属性是非本机类型吗?
答案 0 :(得分:5)
我假设你想确定目标类型是不是主要的。您可以使用TypeCode
,例如:
public bool IsNotCoreType(Type type)
{
return (type != typeof(object) && Type.GetTypeCode(type) == TypeCode.Object);
}
任何非原语应该返回TypeCode.Object
作为Type.GetTypeCode
的结果,因此我们可以检查我们是否得到了该类型,并且该类型本身不是System.Object
。
也许这会有所帮助?
更新:我已将方法重命名为 IsNotCoreType ,以涵盖基元和非基元,例如String
,DateTime
等(见下面的评论)。
答案 1 :(得分:1)
string是一个例外,是.NET中唯一的基本类型,它是一种引用类型。您必须在代码中考虑此异常,以便检查IsClass
是否为真且类型与System.String
不同。