📅  最后修改于: 2023-12-03 15:20:06.726000             🧑  作者: Mango
在C#中,Reflection是一个非常强大的工具,可以让你在运行时动态调用类型信息。通过Reflection,你可以获取一个类的所有成员,包括其字段、属性、方法等等。本文将介绍如何使用Reflection从一个对象中获取属性值并将其设置为其他变量。
首先,我们需要创建一个示例类:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
现在,我们创建一个Person对象并给其赋值:
Person person = new Person()
{
Name = "John",
Age = 32,
Address = "123 Main St."
};
我们想要将这些属性值设置为其他变量,而不需要显式地为每个属性写一个赋值语句。下面是如何使用Reflection从Person对象中获取属性值并将其设置为其他变量的示例:
// 获取Person对象的类型
Type personType = person.GetType();
// 获取所有公共属性
PropertyInfo[] properties = personType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
// 循环遍历所有属性并将其值设置为其他变量
foreach (PropertyInfo property in properties)
{
object value = property.GetValue(person);
Console.WriteLine($"Property {property.Name} has value {value}");
switch (property.Name)
{
case "Name":
string name = (string)value;
// Do something with name
break;
case "Age":
int age = (int)value;
// Do something with age
break;
case "Address":
string address = (string)value;
// Do something with address
break;
default:
break;
}
}
我们首先调用GetType()方法获取Person对象的类型。然后,我们获取所有公共属性,使用循环遍历每个属性并获取其值。每当我们获取属性的值时,我们可以根据名称将其转换为正确的类型,并将其分配给其他变量。在上面的示例中,我们将属性值打印到控制台并使用switch语句根据名称分配给正确的变量。
Reflection是一个非常强大的工具,但也很容易被滥用。因为Reflection可以访问类型信息的所有内容,所以它们对于对安全性要求高的应用程序可能不是最佳选择。但是,在某些情况下,Reflection可以是解决问题的最优解。