我正在构建一个方法来接收一个ArrayList(可能是完整的对象),然后列出ArrayList中每个对象的所有字段(及其值).
目前我的代码如下:
public static void ListArrayListMembers(ArrayList list) { foreach (Object obj in list) { Type type = obj.GetType(); string field = type.GetFields().ToString(); Console.WriteLine(field); } }
当然,我理解这段代码的直接问题:如果它有效,它只会在ArrayList中为每个对象打印一个字段.我稍后会修复它 - 现在我只是好奇如何获取与对象关联的所有公共字段.
foreach (Object obj in list) { Type type = obj.GetType(); foreach (var f in type.GetFields().Where(f => f.IsPublic)) { Console.WriteLine( String.Format("Name: {0} Value: {1}", f.Name, f.GetValue(obj)); } }
请注意,此代码需要.NET 3.5才能工作;-)
您可以使用BindingFlags获取在类中直接声明的所有对象Fields:
GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
和所有对象字段包括继承:
GetFields(BindingFlags.Public | BindingFlags.Instance)