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.
您应该使用 PropertyInfo
的 PropertyType
属性 而不是使用 GetType()
方法。
文档摘录:
Gets the type of this property.
所以
pi.GetType().IsPrimitive
使用这个
pi.PropertyType.IsPrimitive
是否可以检查存储在 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.
您应该使用 PropertyInfo
的 PropertyType
属性 而不是使用 GetType()
方法。
文档摘录:
Gets the type of this property.
所以
pi.GetType().IsPrimitive
使用这个
pi.PropertyType.IsPrimitive