是否可以检查存储在PropertyInfo
中的类型是否为原始类型?
例如,我想这样做:
// from and to are both objects declared in the parameters.
Type fType = from.GetType();
Type tType = to.GetType();
PropertyInfo[] fmpi = fType.GetProperties();
PropertyInfo[] tmpi = tType.GetProperties();
foreach(var pi in tmpi)
{
if (pi.CanWrite)
{
var fpi = fmpi.SingleOrDefault(item => item.Name.ToLower() == pi.Name.ToLower());
if (pi.GetType().IsPrimitive || pi.GetType() == typeof(string))
{
pi.SetValue(to, fpi.GetValue(from, null));
}
}
}
无论何时执行此代码,它都不会通过if
statemenet。主要原因是,每当我执行pi.GetType()
时,都会说这是PropertyInfo
。这很明显,因为它被声明为PropertyInfo
。但我希望你能明白。
我还发现pi.PropertyType.Name
包含属性的实际类型的名称。无论如何,我可以对此属性执行IsPrimitive
吗?如果没有,是否有任何工作可以让我做类似的事情?
我签出了How To Test if Type is Primitive,但是在这种情况下,用户使用的是直接类型,而我使用的是PropertyInfo
。
答案 0 :(得分:7)
主要原因是每当我执行pi.GetType()时,它都说这是PropertyInfo。
您应该使用PropertyInfo
的{{3}}属性,而不要使用GetType()
方法。
摘录自文档:
获取此属性的类型。
所以不是
pi.GetType().IsPrimitive
使用此
pi.PropertyType.IsPrimitive