ما هو الخطأ في هذا الرمز التفكير؟ GetFields () يعود صفيف فارغ
-
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);
لا تنتمي إلى StackOverflow