【发布时间】: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