private void InitializeTypeFields() { this.TypeFields = new Dictionary <FieldDef, ITypeDefOrRef>(); MethodDef cctor = this.Type.FindMethod(".cctor"); if (cctor == null) { throw new Exception("Unable to find virtualization type .cctor"); } if (!cctor.HasBody || !cctor.Body.HasInstructions) { throw new Exception("Virtualization type .cctor has no instructions"); } var subs = cctor.FindAll(new Code[] { Code.Ldtoken, Code.Call, Code.Stsfld }); foreach (var sub in subs) { FieldDef field = sub[2].Operand as FieldDef; if (field == null) { continue; } ITypeDefOrRef type = sub[0].Operand as ITypeDefOrRef; if (type == null) { continue; } if (this.TypeFields.ContainsKey(field)) { Console.WriteLine("[InitializeTypeFields] WARNING: Overwriting ITypeDefOrRef for FieldDef"); this.TypeFields[field] = type; } else { this.TypeFields.Add(field, type); } } }