.NET,C#,Reflection:列出字段的字段,字段本身具有字段
发布时间:2020-12-15 19:30:52 所属栏目:百科 来源:网络整理
导读:在.NET C#,假设ClassB有一个ClassA类型的字段. 可以使用方法GetFields轻松列出ClassB的字段. 但是,我还想列出那些本身有字段的ClassB字段的字段. 例如,ClassB的字段x具有字段b,s和i.我想(以编程方式)列出这些字段(正如我在以下代码中的评论所建议的那样). cl
在.NET& C#,假设ClassB有一个ClassA类型的字段.
可以使用方法GetFields轻松列出ClassB的字段. 但是,我还想列出那些本身有字段的ClassB字段的字段. 例如,ClassB的字段x具有字段b,s和i.我想(以编程方式)列出这些字段(正如我在以下代码中的评论所建议的那样). class ClassA { public byte b ; public short s ; public int i ; } class ClassB { public long l ; public ClassA x ; } class MainClass { public static void Main ( ) { ClassA myAObject = new ClassA () ; ClassB myBObject = new ClassB () ; // My goal is this: // ***Using myBObject only***,print its fields,and the fields // of those fields that,*themselves*,have fields. // The output should look like this: // Int64 l // ClassA x // Byte b // Int16 s // Int32 i } } 解决方法
使用FieldInfo.FieldType来反映类中字段的类型.例如.
fieldInfo.FieldType.GetFields(); 以下是基于您的代码的完整示例,如果您在ClassA中有ClassZ,则使用递归.如果你有一个循环对象图,它会中断. using System; using System.Reflection; class ClassA { public byte b; public short s; public int i; } class ClassB { public long l; public ClassA x; } class MainClass { public static void Main() { ClassB myBObject = new ClassB(); WriteFields(myBObject.GetType(),0); } static void WriteFields(Type type,Int32 indent) { foreach (FieldInfo fieldInfo in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { Console.WriteLine("{0}{1}t{2}",new String('t',indent),fieldInfo.FieldType.Name,fieldInfo.Name); if (fieldInfo.FieldType.IsClass) WriteFields(fieldInfo.FieldType,indent + 1); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |