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

后端 未结 3 1309
囚心锁ツ
囚心锁ツ 2021-02-03 23:51

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.Gene         


        
相关标签:
3条回答
  • 2021-02-04 00:26

    You need to specify that you want the private (NonPublic) fields

    Change to:

    FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
    
    0 讨论(0)
  • 2021-02-04 00:35

    Since the field is private, you need to use the overload of GetFields() that allows you to specify BindingFlags.NonPublic.

    To make this work, change it to:

    FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
    
    0 讨论(0)
  • 2021-02-04 00:36

    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);
    
    0 讨论(0)
提交回复
热议问题