如何在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 }