zoukankan      html  css  js  c++  java
  • C# 反射

    /// <summary>
    /// 封装反射的一些方法
    /// </summary>
    public class Reflection
    {
    /// <summary>
    /// 根据源对象的属性填充目标对象的对应字段
    /// </summary>
    /// <param name="source">获取数据的源对象</param>
    /// <param name="target">填充数据的目标对象</param>
    public static void GetViewModelProperties(object source, object target)
    {
    if (source != null)
    {
    foreach (PropertyInfo item in target.GetType().GetProperties())
    {
    var attr = source.GetType().GetProperties().FirstOrDefault(p => p.Name == item.Name);
    if (attr != null)
    {
    var value = attr.GetValue(source, null);
    // 不为null或空的数据才填入,确保有意义
    if (value != null && !string.IsNullOrEmpty(value.ToString()))
    item.SetValue(target, value, null);

    }
    }
    }
    }

    /// <summary>
    /// 获取修改后不同字段对应的DisplayName特性和修改前对应的值
    /// </summary>
    /// <param name="bObj">修改前的对象</param>
    /// <param name="AObj">修改后的对象</param>
    /// <returns>特性名和修改前的值组合字符串," , "分割</returns>
    public static string GetDisplayNameFromComparedObject(object bObj, object AObj)
    {
    string recordStr = string.Empty;
    foreach (var item in AObj.GetType().GetProperties())
    {
    var modelAttr = bObj.GetType().GetProperty(item.Name);
    object oldValue = modelAttr.GetValue(bObj, null);
    object value = item.GetValue(AObj, null);
    if (oldValue == null || value == null)
    continue;
    if (!oldValue.Equals(value))
    {
    // 获取DisplayName特性值
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    {
    DisplayNameAttribute attr = objs[0] as DisplayNameAttribute;
    if (attr != null)
    recordStr += attr.DisplayName + ":" + oldValue + " , ";
    }
    }
    }
    return recordStr;
    }
    /// <summary>
    /// 根据列表生成表头为DisplayName的DataTable
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="lst"></param>
    /// <returns></returns>
    public static DataTable GetDisplayNameToDataTable<T>(List<T> lst)
    {
    DataTable dt = new DataTable();
    foreach (var item in typeof(T).GetProperties())
    {
    string displayName = string.Empty;
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    displayName = (objs[0] as DisplayNameAttribute).DisplayName;

    dt.Columns.Add(new DataColumn(displayName, item.PropertyType));
    }

    foreach (var report in lst)
    {
    DataRow dr = dt.NewRow();
    foreach (var item in report.GetType().GetProperties())
    {
    string displayName = string.Empty;
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    displayName = (objs[0] as DisplayNameAttribute).DisplayName;

    dr[displayName] = item.GetValue(report, null);
    }
    dt.Rows.Add(dr);
    }
    return dt;
    }
    }

  • 相关阅读:
    《剑指offer》— JavaScript(1)二维数组中的查找
    《JavaScript高级程序设计(第三版)》-3
    HTML+CSS基础
    HTML5新增属性
    《javascript高级程序设计(第3版)》-1
    wp8.1 Study7: ListView 和GridView应用
    wp8.1 Study6: App的生命周期管理
    WP8.1 Study5:Data binding数据绑定
    WP8.1 Study4:WP8.1中控件集合应用
    WP8.1 Study3:WP8.1中Animation应用
  • 原文地址:https://www.cnblogs.com/louby/p/4852743.html
Copyright © 2011-2022 走看看