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")。
通过上述方法,你可以灵活地遍历并操作自定义类的属性。
*/