using System;
using System.ComponentModel.DataAnnotations;

public class LoginModel
    {
       
        [Display(Name = "用户名")]
        public string UserName { get; set; }

public string ExternalLoginData { get; set; }
    }
 /// <summary>
        /// 说明:对比实体类
        /// 时间:2014年2月20日 14:17:48
        /// Auhter:Kim
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="newModel"></param>
        /// <param name="oldModel"></param>
        /// <returns></returns>
        public string CompareModel<T>(T newModel, T oldModel) where T : class,new ()
        {
            StringBuilder strLog = new StringBuilder();
            System.Reflection. PropertyInfo[] mPi = typeof(T).GetProperties();
            for (int i = 0; i < mPi.Length; i++)
            {
                System.Reflection. PropertyInfo pi = mPi[i];
                string strName = string .Empty;
                string log=string .Empty;
                if (pi.GetValue(oldModel, null ) != null && pi.GetValue(newModel, null ) != null)
                {

strName = Attributes.GetDisplayInfo<T>(pi.Name);
                    string oldValue = pi.GetValue(oldModel, null).ToString();
                    string newValue = pi.GetValue(newModel, null).ToString();
                    if (oldValue != newValue)
                    {
                        if (GetNameByDictonary(strName, oldValue, newValue, out log))
                            strLog.Append(log);
                        else
                            strLog.AppendFormat("<strong>{0}</strong><span>{0} 从 {1} 改为 {2}</span>&nbsp;&nbsp;", strName, oldValue, newValue);
                    }
                }
            }
            return strLog.ToString();
        }

/// <summary>
        /// 获取DisplayInfo
        /// </summary>
        /// <param name="t"></param>
        public static string GetDisplayInfo<T>( string name) where T : class,new ()
        {
            Type objType = typeof (T);
            // Using reflection.
            string strName = string .Empty;
            PropertyInfo propInfo = objType.GetProperty(name);
            object[] attrs = propInfo.GetCustomAttributes(typeof (DisplayAttribute), true);  // Reflection.
            // Displaying output.
            if (attrs.Length > 0)
            {
                DisplayAttribute a = attrs[0] as DisplayAttribute;
                strName = a.Name;
            }

return strName;
        }

数据模型类对比 反射c#的更多相关文章

  1. phpcms v9二次开发之数据模型类

    系统模型类:model.class.php数据模型类的位置:/phpcms/libs/classes phpcms v9二次开发中,我们要经常需要对模块的数据表进行查询.添加.修改和删除数据等操作,所 ...

  2. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

  3. C#工具:反射帮助类 泛型反射帮助类

    反射帮助类 using System; using System.Reflection; using System.Data; using System.Drawing; using System.R ...

  4. 类的反射及xml文件的解析

    类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...

  5. 类的反射_reflex

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为j ...

  6. python基础-类的反射

    1)反射是通过字符串方式映射内存中的对象. python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是 ...

  7. Django项目的ORM操作之--数据模型类创建

    在django项目中,其自带了ORM(Object Relation Mapping)对象关系映射框架,我们在django项目下app的models模块下对类进行操作,通过ORM会将我们对类的操作转化 ...

  8. java--分析简单java类与反射的联系

    分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...

  9. 类的反射实例(servlet的抽取)

    类的反射实例 具体以后我们写的时候不用写BaseServlet,因为各种框架都已经给我们写好了 所以,user对应的servlet的界面长这样:

随机推荐

  1. 【Python与机器学习】:利用Keras进行多类分类

    多类分类问题本质上可以分解为多个二分类问题,而解决二分类问题的方法有很多.这里我们利用Keras机器学习框架中的ANN(artificial neural network)来解决多分类问题.这里我们采 ...

  2. 每天一个 Linux 命令(13):less 命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性. 在 more 的时候,我们并没有办法向前面 ...

  3. ASP.NET中进行消息处理(MSMQ) 二(转)

          在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介 ...

  4. html 定位问题

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...

  5. CRM 日期类型的一些处理JS

    //当前日期 var now = new Date(); //换算为毫秒数 var now_ms = Date.UTC( now.getFullYear(), now.getMonth(),now.g ...

  6. delphi 常用的将窗口置前的函数

    function BringWindowToTopEx(hWnd: HWND): Boolean;begin if IsIconic(hWnd) then ShowWindow(hWnd, SW_RE ...

  7. 技术那么多,你想看看JSON Schema的测试吗?

    目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...

  8. Blackfin DSP(四):BF533 EBIU之SDRAM

    BF533的SDRAM控制器最大支持128M bytes的SDRAM空间:总线宽度可以配置为4位.8位.16位.处理器与SDRAM的连线包括数据总线D[0:15].地址总线A[1:19].SDRAM刷 ...

  9. 无法连接远程SQL Server 数据库的原因

    1. tcp协议开启 2. 1433端口是否添加防火墙例外

  10. sed 命令及shell的if语句的运用实例

    if [ -f /etc/syslog.conf ];     #判断文件是否存在thensystest=`sed -n  '/^auth.info/p' /etc/syslog.conf`;    ...