用反射检测原生物体

时间:2010-12-14 22:23:14

标签: c# .net reflection

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

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

ObjectA.Name =“Joe”

转换为:

ObjectB.Name =“Joe”

我需要提一个特例,因为当属性是自定义类时,例如:

ObjectA.Address

我希望我能用PropertyType

的IsClass标志来检测这些属性
propInfo.PropertyType.IsClass

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

也许这会有所帮助?

更新:我已将方法重命名为 IsNotCoreType ,以涵盖基元和非基元,例如StringDateTime等(见下面的评论)。

答案 1 :(得分:1)

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

相关问题