玩玩反射 - 刚写的一个动态获取属性值的例子

简介: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ReflectionTest { public class Employee ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReflectionTest
{
    public class Employee
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ReflectionTest
{
    public class GenericReflectionHelper<T>
    {
        public static List<string> GetListString(List<T> srcList, Dictionary<string, string> keyDict)
        {
            string row = string.Empty;
            int i = 0;
            List<string> result = new List<string>();
            foreach (T elem in srcList)
            {
                Type type = elem.GetType();
                row = string.Empty;
                i = 0;
                foreach (KeyValuePair<string, string> dictElem in keyDict)
                {
                    PropertyInfo propertyInfo = type.GetProperty(dictElem.Key);
                    string rowValue = propertyInfo.GetValue(elem, null).ToString();
                    if (i == 0)
                        row += dictElem.Value + ": " + rowValue;
                    else
                        row += ", " + dictElem.Value + ": " + rowValue;

                    i++;
                }

                result.Add(row);
            }

            return result;
        }
    }
}

call method:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Employee> employees = new List<Employee>();
            employees.Add(new Employee { Name = "David", Age = 33 });
            employees.Add(new Employee { Name = "Neil", Age = 34 });
            employees.Add(new Employee { Name = "Tony", Age = 27 });

            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("Name", "姓名");
            dict.Add("Age", "年龄");

            List<string> result = GenericReflectionHelper<Employee>.GetListString(employees, dict);       
            foreach(string row in result)
                Console.WriteLine(row);
        }
    }
}

运行结果:
姓名: David, 年龄: 33
姓名: Neil, 年龄: 34
姓名: Tony, 年龄: 27

 

 

目录
相关文章
|
6月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
76 4
|
3月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
5月前
|
存储 搜索推荐 Python
【随手记】python语法:类属性和实例属性
【随手记】python语法:类属性和实例属性
60 1
|
6月前
|
JavaScript 开发者 索引
【亮剑】探讨了在TypeScript中为对象动态添加属性的三种方式
【4月更文挑战第30天】本文探讨了在TypeScript中为对象动态添加属性的三种方式:1) 使用索引签名允许添加任意属性,如`[key: string]: any`;2) 通过接口和类型别名提供编译时类型检查,例如`interface Person { name: string; age: number; }`;3) 利用类创建具有属性的对象,如`class Person { name: string; age: number; }`。每种方法有其适用场景,开发者可根据需求选择。
669 0
|
6月前
|
C++ 容器
【C++11特性篇】一文带小白轻松理解【万能引用(引用折叠)】&【完美转发】
【C++11特性篇】一文带小白轻松理解【万能引用(引用折叠)】&【完美转发】
|
编译器 C++
C++ :类 和 对象 ※重点※(二)
C++ :类 和 对象 ※重点※(二)
74 0
|
编译器 C++
C++ :类 和 对象 ※重点※(一)
C++ :类 和 对象 ※重点※
45 0
|
Java 编译器 C++
C++ :类 和 对象 ※重点※(三)
C++ :类 和 对象 ※重点※(三)
82 0
|
JavaScript
js基础笔记学习69-枚举对象中得属性
js基础笔记学习69-枚举对象中得属性
71 0
js基础笔记学习69-枚举对象中得属性
|
存储 JavaScript
七个例子带你搞懂JS对象中的数据属性与访问器属性
有人会问:对象属性也分类别?!是指函数和变量的不同吗?还是分为可枚举属性或者是不可枚举属性,其实属性分为两个大类,一种为数据属性,一种为访问器属性
119 0