我想动态解析对象树以进行一些自定义验证。验证并不重要,但我想更好地理解PropertyInfo类。
我会做这样的事情,
public bool ValidateData(object data)
{
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (the property is a string)
{
string value = propertyInfo.GetValue(data, null);
if value is not OK
{
return false;
}
}
}
return true;
}
目前我关心的唯一部分是'如果属性是字符串'。如何从PropertyInfo对象中找出它的类型。
我将不得不处理基本的东西,如字符串,整数,双打。但我也必须同时处理对象,如果是这样,我将需要在对象树中进一步向下遍历这些对象以验证其中的基本数据,它们也会有字符串等。
感谢。
答案 0 :(得分:179)
使用PropertyInfo.PropertyType
获取属性的类型。
public bool ValidateData(object data)
{
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (propertyInfo.PropertyType == typeof(string))
{
string value = propertyInfo.GetValue(data, null);
if value is not OK
{
return false;
}
}
}
return true;
}
答案 1 :(得分:1)
我偶然发现了这个很棒的帖子。如果您只是检查数据是否为字符串类型,那么也许我们可以跳过循环并使用此结构(以我的拙见)
public static bool IsStringType(object data)
{
return (data.GetType().GetProperties().Where(x => x.PropertyType == typeof(string)).FirstOrDefault() != null);
}