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

C# check if type of PropertyInfo is primitive

是否可以检查存储在 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 语句。主要原因是每当我执行 pi.GetType() 时,它都会说它是 PropertyInfo。这很明显,因为它被声明为 PropertyInfo。但我希望你能明白。

我还发现 pi.PropertyType.Name 包含 属性 的实际类型的名称。反正我可以在这个 属性 上执行 IsPrimitive 吗?如果没有,是否有任何解决方法让我做这样的事情?

我查看了 How To Test if Type is Primitive,但在这种情况下,用户使用的是直接类型,而我使用的是 PropertyInfo

The main reason is that whenever I do pi.GetType() it says that it's a PropertyInfo.

您应该使用 PropertyInfoPropertyType 属性 而不是使用 GetType() 方法。

文档摘录:

Gets the type of this property.

所以

pi.GetType().IsPrimitive 

使用这个

pi.PropertyType.IsPrimitive