📜  c# 按名称获取对象属性值 - C# (1)

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

C# 按名称获取对象属性值

在 C# 中,我们可以通过对象的名称来获取其属性值。本文介绍如何在 C# 中按名称获取对象属性值。

使用反射获取属性值

C# 中的反射机制可以使我们在运行时访问和修改对象的属性和方法。因此,我们可以使用反射来获取指定对象的属性值。

以下代码展示了如何使用反射获取对象指定属性的值:

object obj = new MyClass();
string propertyName = "Name";
Type type = obj.GetType();
PropertyInfo propertyInfo = type.GetProperty(propertyName);
object propertyValue = propertyInfo.GetValue(obj);

在上面的代码中,我们首先创建了一个 MyClass 类的实例对象 obj,并指定了要获取的属性名称 Name。接着,我们使用 GetType 方法获取对象的类型,并通过调用 GetProperty 方法获取属性信息对象 propertyInfo。最后,我们使用 GetValue 方法获取属性值。

需要注意的是,如果要获取的属性定义为非公共属性,则需要在 GetProperty 方法中指定 BindingFlags 参数,如下所示:

PropertyInfo propertyInfo = type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic);

此时,BindingFlags 参数指定了要获取实例属性和非公共属性。

示例代码

以下示例代码展示了如何使用反射获取对象的属性值:

using System;
using System.Reflection;

class MyClass
{
    public string Name { get; set; }
    private int Age { get; set; } = 18;
}

class Program
{
    static void Main(string[] args)
    {
        object obj = new MyClass();

        // 获取公共属性
        string propertyName = "Name";
        Type type = obj.GetType();
        PropertyInfo propertyInfo = type.GetProperty(propertyName);
        object propertyValue = propertyInfo.GetValue(obj);
        Console.WriteLine($"{propertyName}: {propertyValue}");

        // 获取非公共属性
        propertyName = "Age";
        propertyInfo = type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic);
        propertyValue = propertyInfo.GetValue(obj);
        Console.WriteLine($"{propertyName}: {propertyValue}");
    }
}

输出结果为:

Name:
Age: 18
总结

通过使用 C# 反射机制,我们可以在运行时根据属性名称获取对象的属性值。需要注意的是,如果要获取的属性是非公共属性,则需要在调用 GetProperty 方法时指定 BindingFlags 参数。