如何在c#中迭代内部属性
public class TestClass { public string property1 { get; set; } public string property2 { get; set; } internal string property3 { get; set; } internal string property4 { get; set; } internal string property5 { get; set; } }
我可以使用以下循环遍历属性,但它只显示公共属性。 我需要所有的属性。
foreach (PropertyInfo property in typeof(TestClass).GetProperties()) { //do something }
您需要使用重载接受BindingFlags
来指定您不仅需要公共属性:
foreach (PropertyInfo property in typeof(TestClass) .GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) { //do something }
如果要包含静态属性,请添加BindingFlags.Static
。
无参数重载仅返回公共属性。
您需要在调用Type.GetProperties
更改BindingFlags
尝试:
var instanceProperties = typeof(TestClass).GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ); foreach(var instanceProperty in instanceProperties) { // a little something something for the instanceProperty }
根据MSDN ,在Reflection API中无法识别私有和内部。
要使用Reflection标识内部方法,请使用IsAssembly属性。 要标识受保护的内部方法,请使用IsFamilyOrAssembly。
如果您正在编写一些测试单元您可能需要查看InternalsVisibleTo属性。 它允许您指定哪个程序集可以看到内部属性。
最后,你真的需要内部属性……
通过在GetProperties中指定哪些bindingflags:
foreach (PropertyInfo property in typeof(TestClass).GetProperties( BindingFlags.Instance| BindingFlags.Public| BindingFlags.NonPublic))
使用BindingFlags
foreach (PropertyInfo property in typeof(TestClass) .GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { //do something }