Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to get a System.Collections.Generic.List<FieldInfo> which holds all FieldInfo's of an object of a Type T up to the Object in the class hierarchy?
    text
    copied!<p>I am trying to reuse an existing code ... but with no success . Here is the code snippet: </p> <pre><code>using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; using System.Reflection; namespace GenApp.Utils.Reflection { class FieldTraverser { public static string SearchFieldValue(object obj, int MaxLevel, string strFieldMeta , ref object fieldValue) { if (obj == null) return null; else { StringBuilder sb = new StringBuilder(); bool flagShouldStop = false; FieldTraverser.PrivDump(sb, obj, "[ObjectToDump]", 0, MaxLevel , ref flagShouldStop , ref fieldValue); return sb.ToString(); } } //eof method public static object GetFieldValue(object obj, string fieldName, ref bool flagShouldStop, ref object objFieldValue) { FieldInfo fi; Type t; t = obj.GetType(); fi = t.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (fi == null) return null; else { if (fi.Name.Equals(fieldName)) { objFieldValue = fi.GetValue(obj); flagShouldStop = true; } return fi.GetValue(obj); } //eof else } //eof method protected static void DumpType(string InitialStr, StringBuilder sb, object obj, int level, System.Type t, int maxlevel , ref bool flagShouldStop , ref object objFieldValue ) { FieldInfo[] fi; fi = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (t == typeof(System.Delegate)) return; foreach (FieldInfo f in fi) { PrivDump(sb, f.GetValue(obj), f.Name, level + 1, maxlevel , ref flagShouldStop , ref objFieldValue); if (flagShouldStop == true) return; } object[] arl; int i; if (obj is System.Array) { try { arl = (object[])obj; for (i = 0; i &lt; arl.GetLength(0); i++) { PrivDump(sb, arl[i], "[" + i + "]", level + 1, maxlevel, ref flagShouldStop, ref objFieldValue); if (flagShouldStop == true) return; } } catch (Exception) { } } } protected static void PrivDump(StringBuilder sb, object obj, string objName, int level, int MaxLevel, ref bool flagShouldStop, ref object objFieldValue) { if (obj == null) return; if (MaxLevel &gt;= 0 &amp;&amp; level &gt;= MaxLevel) return; string padstr; padstr = ""; for (int i = 0; i &lt; level; i++) if (i &lt; level - 1) padstr += "|"; else padstr += "+"; string str; string[] strarr; Type t; t = obj.GetType(); strarr = new String[7]; strarr[0] = padstr; strarr[1] = objName; strarr[2] = " AS "; strarr[3] = t.FullName; strarr[4] = " = "; strarr[5] = obj.ToString(); strarr[6] = "\r\n"; sb.Append(String.Concat(strarr)); if (obj.GetType().BaseType == typeof(ValueType)) return; FieldTraverser.DumpType(padstr, sb, obj, level, t, MaxLevel, ref flagShouldStop , ref objFieldValue); Type bt; bt = t.BaseType; if (bt != null) { while (!(bt == typeof(Object))) { str = bt.FullName; sb.Append(padstr + "(" + str + ")\r\n"); FieldTraverser.DumpType(padstr, sb, obj, level, bt, MaxLevel , ref flagShouldStop , ref objFieldValue); bt = bt.BaseType; if (bt != null) continue; break; } while (bt != typeof(Object)) ; } } //eof method }//eof class } //eof namespace </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload