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
Post a Comment