c# - How to create a list of the variables from class -


please me have class of type:

class class1 {     ///<summary>1</summary>     [structlayout(layoutkind.sequential, pack = 1)]     public class point     {         ///<summary>1-1</summary>         public double x;     };      ///<summary>2</summary>     [structlayout(layoutkind.sequential, pack = 1)]     public class base : point     {         ///<summary>2-1</summary>         [marshalas(unmanagedtype.byvalarray, sizeconst = 32)]         public char[] name;         ///<summary>2-2</summary>         public uint64 type;         ///<summary>2-3</summary>         [marshalas(unmanagedtype.byvalarray, sizeconst = 64)]         public char[] model;     };      ///<summary>3</summary>     [structlayout(layoutkind.sequential, pack = 1)]     public class object : base     {         ///<summary>3-1</summary>         public int state;         ///<summary>3-2</summary>         public double g;         ///<summary>3-3</summary>         public float l;         ///<summary>3-4</summary>         public point m = new point();         ///<summary>3-4</summary>         [marshalas(unmanagedtype.byvalarray, sizeconst = 25)]         public char[] fdsarrnull;     }; } 

how create list of variables class, , how can comment variable?

i need list, names of variables , comment no values.

thank reply, if class small works well, if class large slow possible accelerate process? have big class, , need touch 100 times second, touch it, way

public static list<keyvaluepair<string, string>> listdata_obj = new list<keyvaluepair<string, string>>();        private static void get_data_from_obj()         {             fieldinfo[] fields = obj.gettype().getfields();             listdata_obj.clear();             foreach (fieldinfo field in fields)             {                 mn = field.name;                 if (field.fieldtype.namespace.equals("system"))                 {                      if (field.fieldtype.name == "char[]")                     {                         char[] char_field = (char[])field.getvalue(obj);                         string str = new string(char_field);                         listdata_obj.add(new keyvaluepair<string, string>(mn, str.trimend('\0')));                     }                     else                     {                         listdata_obj.add(new keyvaluepair<string, string>(mn, field.getvalue(obj).tostring()));                     }                 }                 else                 {                     var fields_of_field = field.getvalue(obj);                     foreach (var field2 in fields_of_field.gettype().getfields())                     {                         if (field2.fieldtype.namespace.equals("system"))                         {                              if (field2.fieldtype.name == "char[]")                             {                                 var char_field = (char[])field2.getvalue(fields_of_field);                                 string str = new string(char_field);                                 listdata_obj.add(new keyvaluepair<string, string>(mn+"."+field2.name, str.trimend('\0')));                             }                             else                             {                                 listdata_obj.add(new keyvaluepair<string, string>(mn + "." + field2.name, field2.getvalue(fields_of_field).tostring()));                             }                         }                         else                         {                             var str = mn + "." + field2.name + ".";                             recurs(field2, fields_of_field, str);                         }                     }                 }             }         }          static void recurs(fieldinfo field, dynamic fields_of_field,string strn)         {              var fields_of_field2 = field.getvalue(fields_of_field);             foreach (var field2 in fields_of_field2.gettype().getfields())             {                 if (field2.fieldtype.namespace.equals("system"))                 {                     if (field2.fieldtype.name == "char[]")                     {                         var char_field = (char[])field2.getvalue(fields_of_field2);                         string str = new string(char_field);                         listdata_obj.add(new keyvaluepair<string, string>(strn+"."+mn+"."+field2.name, str.trimend('\0')));                     }                     else                     {                         listdata_obj.add(new keyvaluepair<string, string>(strn + "." + mn + "." + field2.name, field2.getvalue(fields_of_field2).tostring()));                     }                 }                 else                 {                     var str1 = strn + mn + "." + field2.name + ".";                     recurs(field2, fields_of_field2, str1);                 }             }         } 

but slow in spite of fact runs on separate thread

you can use reflection list of members of class :

  fieldinfo[] fields = obj.gettype().getfields(bindingflags.public | bindingflags.nonpublic | bindingflags.static | bindingflags.flattenhierarchy | bindingflags.instance); 

then process array list of member names.

list<string> mylist = new list<string>(); foreach (var field in fields)     mylist.add(field.name); 

you recurse structure if wanted field names of base classes. following code adds field names 1 further level (so m.x) - convert recursive function if required. play around code results need.

  list<string> ml = new list<string>();   foreach (var field in fields)   {     string mn = field.name;     ml.add(mn);      if (field.fieldtype.namespace.equals("system"))       continue;      fieldinfo[] fields2 = field.fieldtype.getfields(bindingflags.public | bindingflags.nonpublic | bindingflags.static | bindingflags.flattenhierarchy | bindingflags.instance);     if (fields2.length == 0)       continue;     foreach (var field2 in fields2)     {       ml.add(mn + "." + field2.name);     }   } 

note explicitly not add field names system defined types - limit checking types defined in namespace.

i don't think possible comments during run-time (though happy corrected on that). see : programmatically summary comments @ runtime


Comments