C# 如何检查 PropertyInfo 的类型是否为基元类型

4

能否检查存储在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?如果没有,是否有任何解决方法可以让我做类似的事情?
我查看了如何测试类型是否为原始类型,但在这种情况下,用户正在使用直接类型而我正在使用PropertyInfo

可能是[如何测试类型是否为原始类型]的重复问题(https://dev59.com/MXE95IYBdhLWcg3wHqal)。 - Lucifer
不是的,因为我正在使用 PropertyInfo 而不是直接类型。 - B. Hulshof
@B.Hulsof,您是否参考了该页面上的所有答案? - Lucifer
你对原始类型的定义是什么?因为人们在这方面有各种误解。 - TheGeneral
是的,我做了,但这个问题略有不同。 - B. Hulshof
1个回答

12
主要原因是每次执行pi.GetType()时,它都会显示为PropertyInfo。
你应该使用PropertyType属性而不是使用GetType()方法。
来自文档的摘录:
获取此属性的类型。
因此,不要使用
pi.GetType().IsPrimitive 

使用此{{内容}}。
pi.PropertyType.IsPrimitive 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接