📜  set-variables-from-an-object-using-reflection - C# (1)

📅  最后修改于: 2023-12-03 15:20:06.726000             🧑  作者: Mango

Set Variables from an Object using Reflection - C#

在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可以是解决问题的最优解。