FieldDefinition GetField (TypeDefinition type, FieldReference reference) { while (type != null) { var field = GetField (type.Fields, reference); if (field != null) return field; if (type.BaseType == null) return null; type = Resolve (type.BaseType); } return null; }
static FieldDefinition GetField (Collection<FieldDefinition> fields, FieldReference reference) { for (int i = 0; i < fields.Count; i++) { var field = fields [i]; if (field.Name != reference.Name) continue; if (!AreSame (field.FieldType, reference.FieldType)) continue; return field; } return null; }
public virtual FieldDefinition Resolve (FieldReference field) { if (field == null) throw new ArgumentNullException ("field"); var type = Resolve (field.DeclaringType); if (type == null) return null; if (!type.HasFields) return null; return GetField (type, field); }