zoukankan      html  css  js  c++  java
  • 利用反射拿到并递归C#类中的各个字段名字及类型

       以下方法实现了遍历一个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);
                        }
                      
                    }
                }
               
            }
  • 相关阅读:
    vue-cli + webpack 多页面实例配置优化方法
    Python Web(1):建立第一个Web项目
    C# winform用sharpGL(OpenGl)解析读取3D模型obj
    CSS outline 属性
    sqlserver查询两个值是否相等
    vue v-for(数组遍历)
    内存查看工具RAMMAP说明
    linux 入门
    linux 内核根文件系统
    linux 命令
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3169039.html
Copyright © 2011-2022 走看看