使用C#反射获取类T的属性列表

12 浏览
0 Comments

使用C#反射获取类T的属性列表

我需要从Class T中获取属性列表 - GetProperty()。我尝试了以下代码但失败了。

示例类:

public class Foo {
    public int PropA { get; set; }
    public string PropB { get; set; }
}

我尝试了以下代码:

public List GetProperty() where T : class {
    List propList = new List();
    // 获取MyClass类型的所有公共静态属性
    PropertyInfo[] propertyInfos;
    propertyInfos = typeof(T).GetProperties(BindingFlags.Public |
                                                    BindingFlags.Static);
    // 按名称对属性进行排序
    Array.Sort(propertyInfos,
            delegate (PropertyInfo propertyInfo1,PropertyInfo propertyInfo2) { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });
    // 写入属性名称
    foreach (PropertyInfo propertyInfo in propertyInfos) {
        propList.Add(propertyInfo.Name);
    }
    return propList;
}

我需要获取属性名称的列表

预期输出:GetProperty()

new List() {
    "PropA",
    "PropB"
}

我尝试了很多stackoverflow的参考,但是无法得到预期的输出。

参考:

  1. c# getting ALL the properties of an object
  2. How to get the list of properties of a class?

请帮助我。

0
0 Comments

C#反射是一种强大的技术,可以在运行时动态地获取和操作类型的信息。然而,在使用C#反射时,有时会遇到一些问题,需要找到原因并解决。

在这个问题中,原因是绑定标志设置不正确。由于属性不是静态属性,而是实例属性,所以需要用BindingFlags.Instance替换BindingFlags.Static

为了解决这个问题,可以使用以下代码:

propertyInfos = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

这将在类型上适当地查找公共的、实例的、非静态的属性。在这种情况下,也可以省略绑定标志,得到相同的结果。

通过这种方法,我们可以使用C#反射获取类T的属性列表。这对于动态地操作对象的属性非常有用。

0