📅  最后修改于: 2023-12-03 15:13:50.475000             🧑  作者: Mango
在 C# 中,我们可以使用字符串来获取对象中的属性。这在编写通用代码和框架时非常有用,因为您不需要在运行时知道实例的具体类型。
假设我们有以下类:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
如果我们想要获取 Person 类的 Name 属性,我们可以使用以下代码:
var person = new Person { Name = "John", Age = 35 };
string propertyName = "Name";
var propertyValue = person.GetType().GetProperty(propertyName).GetValue(person, null);
这将返回 Person 对象的 Name 属性值,即 "John"。
请注意,GetProperty() 方法可以接受一个额外的参数,它是一个对象数组,这可以用于传递索引或其他属性值。
当您尝试获取一个不存在的属性时,GetProperty() 方法将返回 null 值。为了避免 NullReferenceException,您应该使用以下代码检查返回值是否为 null:
var person = new Person { Name = "John", Age = 35 };
string propertyName = "Address";
var propertyInfo = person.GetType().GetProperty(propertyName);
if (propertyInfo != null)
{
var propertyValue = propertyInfo.GetValue(person, null);
}
else
{
// 处理属性不存在的情况
}
在 C# 中,您还可以使用 System.ComponentModel.DataAnnotations 命名空间来获取属性的名称。这对于在属性上设置自定义属性(例如 [Display]、[Description] 等)时非常有用。
例如,我们可以使用以下代码获取 Person 类的 Name 属性的显示名称:
var propertyInfo = typeof(Person).GetProperty(nameof(Person.Name));
var displayName = propertyInfo.GetCustomAttribute<DisplayAttribute>().Name;
使用字符串获取属性是在 C# 中非常有用的功能,可以让您的代码更加通用和灵活。但是,由于运行时错误的潜在风险,请务必小心使用此功能,并始终检查返回值是否为 null 值。