public override IEnumerable <ClrType> EnumerateTypes() { DesktopGCHeap heap = (DesktopGCHeap)_runtime.Heap; IList <MethodTableTokenPair> mtList = _runtime.GetMethodTableList(_address); if (_typesLoaded) { foreach (ClrType type in heap.EnumerateTypes()) { if (type.Module == this) { yield return(type); } } } else { if (mtList != null) { foreach (MethodTableTokenPair pair in mtList) { ulong mt = pair.MethodTable; if (mt != _runtime.ArrayMethodTable) { // prefetch element type, as this also can load types ClrType type = heap.GetTypeByMethodTable(mt, 0, 0); if (type != null) { yield return(type); } } } } _typesLoaded = true; } }