用反射获取自定义类属性及其值的2种方案-在通用导出Excel方法中非常有用-可根据不同类不同属性动态创建并导出xlsx

using Model;
using System;
using System.Reflection;

namespace 用反向获取自定义类属性及其值
{
    class Program
    {
        static void Main(string[] args)
        {
            UserInfo user = new UserInfo();
            user.UserName = "zjw";
            user.RegTime = DateTime.Now;

            Type type = user.GetType();//// 获取Person类的Type对象  2种获取类型的方式 一个是类做参数 一个是类对象做参数
            PropertyInfo[] props = type.GetProperties();//无参 获取所有公共属性 (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo item in props)
            {
                string tmp = item.GetValue(user) == null ? "空null" : item.GetValue(user).ToString();
                Console.WriteLine($"propertyName:{item.Name}  propertyValue:{tmp}");                
            }
            Console.WriteLine("方式(一) 通过 类的对象 获取 类的  属性名及属性值");
            Console.ReadKey();

            Console.WriteLine("-------------------------------------------");
            Type type2 = typeof(UserInfo);//一个是类做参数
            PropertyInfo[] props2 = type2.GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo item in props2)
            {
                string tmp2 = item.GetValue(user) == null ? "空null" : item.GetValue(user).ToString();
                Console.WriteLine($"propertyName:{item.Name}  propertyValue:{tmp2}");                
            }
            Console.WriteLine("方式(二) 通过 类 获取 类的属性及属性值");
            Console.ReadKey();
        }
    }
}
/*
 * 在C#中,如果你想  遍历  一个   自定义类  的属性,
 * 你可以使用  反射(Reflection)API  来完成这一任务。
 * 反射允许你在  运行时  检查  对象和类型  的  元数据,
 * 包括它们的  属性、方法、字段  等。
 * 下面是如何使用反射来遍历自定义类属性的一个例子:
 * 
 * 解释
‌获取Type对象‌:首先,使用person.GetType()获取Person类的Type对象。
这是反射的基础,因为所有反射操作都是基于Type对象的。

‌获取属性信息‌:通过调用type.GetProperties()方法,可以获取到该类型所有公共属性的数组。
如果你只想获取非公共属性,可以使用
GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)来指定BindingFlags。

‌遍历属性‌:使用foreach循环遍历这些属性。
在循环体内,你可以使用PropertyInfo对象的Name属性获取属性名,使用GetValue(person)方法获取属性的值。

注意事项
使用反射可能会稍微影响性能,特别是在频繁调用或处理大量数据时。因此,在性能敏感的应用中要谨慎使用。
通过反射访问属性时,如果属性是私有或受保护的,你可能需要传递正确的BindingFlags来确保能够访问到这些属性。
例如,使用type.GetProperty("PropertyName", BindingFlags.NonPublic | BindingFlags.Instance)来访问私有属性。
如果需要修改属性值,可以使用SetValue(person, value)方法。例如:property.SetValue(person, "new value")。
通过上述方法,你可以灵活地遍历并操作自定义类的属性。
 */

 

posted @ 2026-06-13 05:53  techNote  阅读(2)  评论(0)    收藏  举报