📅  最后修改于: 2023-12-03 15:13:51.730000             🧑  作者: Mango
在 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
参数。