C#检查PropertyInfo的类型是否为原始

时间:2018-07-02 12:01:45

标签: c# system.reflection

是否可以检查存储在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

1 个答案:

答案 0 :(得分:7)

  

主要原因是每当我执行pi.GetType()时,它都说这是PropertyInfo。

您应该使用PropertyInfo的{​​{3}}属性,而不要使用GetType()方法。

摘录自文档:

  

获取此属性的类型。

所以不是

pi.GetType().IsPrimitive 

使用此

pi.PropertyType.IsPrimitive