【发布时间】:2019-09-16 21:31:38
【问题描述】:
基本上我想在 List 中创建一个类的反射版本,这样我就可以遍历列表,然后也遍历它的属性。
我已经到了可以遍历类的单个实例的属性的地方,但我似乎无法为反射类的 List 找到解决方案。
基本上我想要List[i].property[j] = GetData(c);
下面是我用来获取反射类及其属性列表的代码。
Type reportType = typeof(ReportController);
Type reportListType = typeof(List<ReportController>);
PropertyInfo[] properties = reportListType.GetProperties();
我也尝试了=typeof(List<>);,但传入了报告类型,无论出于何种原因,格式都不会在 SO 上显示。
以下是我访问过的参考资料。
C# instantiate generic List from reflected Type
https://docs.microsoft.com/en-us/dotnet/api/system.type.makegenerictype?view=netframework-4.8
Set object property using reflection
感谢所有帮助。
为什么在 stackoverflow 上获得帮助会如此痛苦?我的意思是说真的,如果您花时间发表评论对您来说很容易,为什么不通过一些代码并获得免费答案?
编辑: 下面会给我一个类数组,但我无法枚举属性,它只是给了我数组类型的属性。
Type reportType = typeof(ReportController).MakeArrayType();
PropertyInfo[] properties = reportType.GetProperties();
【问题讨论】:
-
您能否尝试显示更多代码并解释您的意思?看来你自相矛盾了……
-
我怎么会自相矛盾?
-
A
List<>不存在; “反射类的List<>”将是List<Type>,而不是例如List<ReportController>是多个ReportController对象的列表。你要哪个? “对它的属性做同样的事情”——“它的”指的是什么? “做同样的事情”是什么意思?我认为=typeof(List<>)不会在您的代码中起作用,并且不会发生任何传递。 -
reportListType.GetProperties()会给你List<ReportController>的属性,所以你会得到像Count这样的东西,所有列表都有。我不认为这就是你想要的。reportType.GetProperties()将为您提供在ReportController上找到的反射属性。但听起来你有一段路要走。我建议使用 LINQPad 来更好地通过反射类可视化您的探索结果。 -
1.我的代码清楚地显示我试图获取 List
并且我明确表示我希望结果是 List[i].properties[j] = GetData。这意味着我想同时遍历反射类及其各自属性的列表
标签: c# list reflection