ما هو الخطأ في هذا الرمز التفكير؟ GetFields () يعود صفيف فارغ

StackOverflow https://stackoverflow.com/questions/1040803

  •  22-07-2019
  •  | 
  •  

سؤال

وC #، صافي 2.0

وهنا هو رمز (أنا أخرج كل ما عندي من الاشياء مجال معين، وأنه لا يزال بإرجاع صفيف فارغة):

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; }
        }

    }
}
هل كانت مفيدة؟

المحلول

ووparameterless عوائد GetFields() <م> العامة المجالات. إذا كنت تريد منها غير العامة، استخدام:

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

وأو أي مزيج مناسب تريد - ولكنك <م> قيام تحتاج إلى تحديد واحد على الأقل من Instance وStatic، وإلا فإنه لن تجد سواء. يمكنك تحديد كل، بل والمجالات العامة وكذلك، للحصول على كل شيء:

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

نصائح أخرى

ومنذ الحقل الخاص، تحتاج إلى استخدام الزائد للGetFields () الذي يسمح لك بتحديد <لأ href = "http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags .aspx اتصال "يختلط =" noreferrer "> BindingFlags.NonPublic .

لجعل هذا العمل، تغييره إلى:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

وتحتاج إلى تحديد أنك تريد (غير العامة) حقول خاصة

تغيير إلى:

FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top