📜  c# 使用字符串获取属性 - C# (1)

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

C# 使用字符串获取属性

在 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
{
    // 处理属性不存在的情况
}
使用 System.ComponentModel.DataAnnotations 命名空间

在 C# 中,您还可以使用 System.ComponentModel.DataAnnotations 命名空间来获取属性的名称。这对于在属性上设置自定义属性(例如 [Display]、[Description] 等)时非常有用。

例如,我们可以使用以下代码获取 Person 类的 Name 属性的显示名称:

var propertyInfo = typeof(Person).GetProperty(nameof(Person.Name));
var displayName = propertyInfo.GetCustomAttribute<DisplayAttribute>().Name;
结论

使用字符串获取属性是在 C# 中非常有用的功能,可以让您的代码更加通用和灵活。但是,由于运行时错误的潜在风险,请务必小心使用此功能,并始终检查返回值是否为 null 值。