使用C#反射获取类T的属性列表
使用C#反射获取类T的属性列表
我需要从Class T
中获取属性列表 - GetProperty
。我尝试了以下代码但失败了。
示例类:
public class Foo { public int PropA { get; set; } public string PropB { get; set; } }
我尝试了以下代码:
public ListGetProperty () 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的参考,但是无法得到预期的输出。
参考:
请帮助我。
C#反射是一种强大的技术,可以在运行时动态地获取和操作类型的信息。然而,在使用C#反射时,有时会遇到一些问题,需要找到原因并解决。
在这个问题中,原因是绑定标志设置不正确。由于属性不是静态属性,而是实例属性,所以需要用BindingFlags.Instance
替换BindingFlags.Static
。
为了解决这个问题,可以使用以下代码:
propertyInfos = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
这将在类型上适当地查找公共的、实例的、非静态的属性。在这种情况下,也可以省略绑定标志,得到相同的结果。
通过这种方法,我们可以使用C#反射获取类T的属性列表。这对于动态地操作对象的属性非常有用。