利用反射拿到并递归C#类中的各个字段名字及类型
原创muzizongheng 博主文章分类:C# ©著作权
©著作权归作者所有:来自51CTO博客作者muzizongheng的原创作品,请联系作者获取转载授权,否则将追究法律责任
以下方法实现了遍历一个class中所有的字段, 并且递归遍历sub class。
private StringBuilder _properties = new StringBuilder();
public MainView()
{
TraversalProperties(typeof(StudyInfoModel));
File.WriteAllText("Properties.txt", _properties.ToString());
}
private void TraversalProperties(Type classTemplate)
{
if (null == classTemplate)
{
return;
}
foreach (PropertyInfo pi in
classTemplate.GetProperties(BindingFlags.Public | BindingFlags.Instance| BindingFlags.DeclaredOnly))
{
PropertyInfo needUpdateValue = classTemplate.GetProperty(pi.Name);
if (needUpdateValue.PropertyType.Equals(classTemplate))
{
return;
}
if (needUpdateValue.PropertyType.IsArray
|| (needUpdateValue.PropertyType.IsClass
&& !needUpdateValue.PropertyType.IsGenericType
&& !needUpdateValue.PropertyType.Equals(typeof(String))
&& !needUpdateValue.PropertyType.IsValueType
)
)
{
TraversalProperties(needUpdateValue.PropertyType);
}
else if (needUpdateValue.PropertyType.IsGenericType
&& needUpdateValue.PropertyType.GetGenericTypeDefinition()== typeof(ObservableCollection<>))
{
TraversalProperties(needUpdateValue.PropertyType.GetGenericArguments()[0]);
}
else
{
if (classTemplate.Name.Contains("StudyInfoModel"))
{
_properties.AppendFormat("\"{0}\", ", needUpdateValue.Name);
}
else
{
_properties.AppendFormat("\"{0}_{1}\", ", classTemplate.Name.Replace("InfoModel", ""), needUpdateValue.Name);
}
}
}
}
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
mysql 更改字段名字 修改mysql字段名
1.数据库存储引擎 mysql> show variables like '%storage_engine%'; #查看mysql当前默认的存储引擎mysql> show engines; #查看存储引擎 InnoDB存储引擎:默认引擎,最常用的。 InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键;InnoDB是默认的 My
mysql 更改字段名字 mysql 修改字段名 mysql 修改字段类型 mysql 密码忘了 mysql 添加外键