What's wrong with this reflection code? GetFields() is returning an empty array

c#, reflection, type-parameter

Solution

The parameterless `GetFields()` returns public fields. If you want non-public ones, use:

cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

or whatever appropriate combination you want - but you do need to specify at least one of `Instance` and `Static`, otherwise it won't find either. You can specify both, and indeed public fields as well, to get everything:

cc.GetType().GetFields(BindingFlags.Instance | 
                       BindingFlags.Static |
                       BindingFlags.NonPublic |
                       BindingFlags.Public);

Problem

C#, Net 2.0 Here's the code (I took out all my domain-specific stuff, and it still returns an empty array): ``` using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ChildClass cc = new ChildClass(); cc.OtherProperty = 1; FieldInfo[] fi = cc.GetType().GetFields(); Console.WriteLine(fi.Length); Console.ReadLine(); } } class BaseClass<T> { private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } } } class ChildClass : BaseClass<ChildClass> { private int myVar; public int OtherProperty { get { return myVar; } set { myVar = value; } } } } ```

Original source