下面是一个代码示例,该代码让我使用对象的属性名称获取值,它适用于扁平对象。
CaptureRequest.Builder
如果T恰好是一个嵌套对象,我该如何工作? 到目前为止,这是我的递归尝试,但还没有成功。
public static object GetPropValue<T>(T obj, String propName)
{
if (obj == null) { return null; }
Type type = typeof(T);
PropertyInfo info = type.GetProperty(propName);
if (info == null) { return null; }
return info.GetValue(obj);
}
在这种情况下,例如,嵌套对象可以是:
public static object GetPropValue<T>(T obj, String propName)
{
if (obj == null) { return null; }
Type type = typeof(T);
foreach(PropertyInfo property in type.GetProperties(BindingFlags.Public))
{
if(!property.PropertyType.IsValueType)
{
var nestedObj = (from subObj in obj select property.GetValue(subOjb));
//recursive call where object pass in is
//one of the nested property object.
GetPropValue(nestedObj, propName);
}
else
{
return property.GetValue(obj);
}
}
}