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

B. *_*hof 1 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));
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

每当我执行此代码时,它都不会通过ifstatemenet.主要原因是每当我这样做pi.GetType()时都说它是一个PropertyInfo.这很明显,因为它被声明为PropertyInfo.但我希望你明白这个主意.

我还发现它pi.PropertyType.Name包含了属性的实际类型的名称.无论如何我可以IsPrimitive在这家酒店执行吗?如果没有,是否有任何工作让我这样做?

我检查了如何测试Type是原始的但是在这种情况下用户正在使用直接类型而我正在使用PropertyInfo.

Cod*_*und 7

主要原因是每当我做pi.GetType()时它就会说它是一个PropertyInfo.

您应该使用PropertyTypeproperty PropertyInfo而不是using GetType()方法.

摘自文档:

获取此属性的类型.

而不是

pi.GetType().IsPrimitive 
Run Code Online (Sandbox Code Playgroud)

用这个

pi.PropertyType.IsPrimitive 
Run Code Online (Sandbox Code Playgroud)