【问题标题】:C# check if type of PropertyInfo is primitiveC# 检查 PropertyInfo 的类型是否是原始的
【发布时间】:2018-07-02 20:25:33
【问题描述】:

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

【问题讨论】:

  • 不,不是,因为我使用的 PropertyInfo 不是直接类型
  • @B.Hulsof 您是否参考了该页面中的所有答案?
  • 首先你对原始的定义是什么,因为人们在这里有各种各样的误解
  • 是的,这个问题有点不同

标签: c# system.reflection


【解决方案1】:

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

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

文档摘录:

获取此属性的类型。

所以不是

pi.GetType().IsPrimitive 

使用这个

pi.PropertyType.IsPrimitive 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2017-07-18
    • 1970-01-01
    • 2023-03-19
    • 2015-02-14
    • 2013-02-02
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多