how to get both fields and properties in single call via reflection?

c#, reflection

Solution

How about:

const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
MemberInfo[] members = type.GetFields(bindingFlags).Cast<MemberInfo>()
    .Concat(type.GetProperties(bindingFlags)).ToArray();

Alternatively, libraries like FastMember will work happily with either fields or properties, with get/set identical regardless of the member-type.

Problem

I apologize if this is covered somewhere. I did research before posting! okay, so question...I'm using GetType( ).GetProperties, but it isn't returning simple instance fields, which don't have get/set on them...so I used .GetFields, which finds them, but I want to get a simple single object to get/set a value on without flipping between fields and properties...is this possible? my current code works on PropertyInfo, which is working great, but that isn't for fields I guess? [edit] this is the solution I came up with, which is working good. thanks everyone.... ``` // some logic borrowed from James Newton-King, http://www.newtonsoft.com public static void SetValue(this MemberInfo member, object property, object value) { if (member.MemberType == MemberTypes.Property) ((PropertyInfo)member).SetValue(property, value, null); else if (member.MemberType == MemberTypes.Field) ((FieldInfo)member).SetValue(property, value); else throw new Exception("Property must be of type FieldInfo or PropertyInfo"); } public static object GetValue(this MemberInfo member, object property) { if (member.MemberType == MemberTypes.Property) return ((PropertyInfo)member).GetValue(property, null); else if (member.MemberType == MemberTypes.Field) return ((FieldInfo)member).GetValue(property); else throw new Exception("Property must be of type FieldInfo or PropertyInfo"); } public static Type GetType(this MemberInfo member) { switch (member.MemberType) { case MemberTypes.Field: return ((FieldInfo)member).FieldType; case MemberTypes.Property: return ((PropertyInfo)member).PropertyType; case MemberTypes.Event: return ((EventInfo)member).EventHandlerType; default: throw new ArgumentException("MemberInfo must be if type FieldInfo, PropertyInfo or EventInfo", "member"); } } ```

Original source

Related problems