• 根据字符串类名反射出类的属性(带源码)


     

    1.1. 应用场景:

     xml中配置一些重复的相同的属性,手工配置比较麻烦,需要一个程序自动配置。

    2.1. 思路:

     

    2.1.1. 编写实体类;

    编写实体类的方法有许多种,第一、可以自己写一个实体类;第二、可以使用代码生成器;第三、可以使用entity framework database first

    我先贴一下实体代码:

     

     using System;
        using System.Collections.Generic;
    
        public partial class students
        {
            public int? Id { get; set; }
            public string Name { get; set; }
            public int Sex { get; set; }
            public DateTime CreateDate { get; set; } 
            public Product product { get; set; }
        }

     

    针对以上的实体类,我作一些说明:

    以上实体类主要是几个属性,属性名类型不一样,有int类型,有string类型,也有datetime和对象类型,其中我将它们分为三种:string、可空类型、原生类型(基本数据类型)。

    为啥要分这几种类型,下面会讲到,这里先略过。

    2.1.2. 编写方法,根据类名反射出来类的属性;

    方法主要是写在一个按钮事件里面,通过点击一下按钮,然后将编写反射出来的类的属性拼接起来,显示在一个文本框中。看代码:

     

    private void btnCreateXML_Click(object sender, EventArgs e)
            {
                //载入实体类所在的dll
                Assembly asmb = Assembly.LoadFrom("DataModel.dll");
                //根据命名空间下的类名,获得类对象
                Type typename = asmb.GetType("DataModel." + txtTableName.Text);
                StringBuilder str = new StringBuilder();
                //根据类型对象,创建实例,再获得它的属性
                foreach (PropertyInfo info in Activator.CreateInstance(typename).GetType().GetProperties())
                {
                    Type type = Type.GetType(info.PropertyType.FullName);
                    if (type != null)
                    {
    
                        //属性有时候会有多种,我们需要排除非原生类型的
                        if (type.IsPrimitive || type.Name.Equals("String") || type.Name.Equals("Nullable`1"))
                        {
                            str.Append("<property ");
                            str.Append(" name="" + info.Name + """);
                            str.Append(" column="" + info.Name + """);
                            if (type.Name.Equals("Nullable`1"))
                            {
                                int start = type.FullName.IndexOf("[[") + 2;
                                int end = type.FullName.IndexOf(",");
                                str.Append(" type="" + type.FullName.Substring(start, end - start) + """);
                            }
                            else
                            {
                                str.Append(" type="" + info.PropertyType.FullName + """);
                            }
                            str.Append("/>");
                        }
                    }
                }
                txtResult.Text = str.ToString();
            }

     源码下载

  • 相关阅读:
    ZOJ 2604 Little Brackets DP
    js实现回放拖拽轨迹-------Day48
    Android蓝牙开发
    linux中的两个很重要的信号:SIGALRM信号和SIGCHID信号
    MySQL mysqldump数据导出详解
    JFinal redis cluster集群插件
    nginx平滑升级
    温故而知新-String类
    Linux环境变量具体解释
    android消息机制
  • 原文地址:https://www.cnblogs.com/renzaijianghu/p/3454881.html
Copyright © 2020-2023  润新知