// It's pretty common for a component to have members that are the same type as other components, so collapse duplicate fieldinfo // so we refer to only a single name and field type that needs to be emitted void ReduceFieldInfos() { var fieldTypes = m_FieldTypes.ToList(); var fieldNames = m_FieldNames.ToList(); var trComparer = new TypeReferenceEqualityComparer(); for (int i = 0; i < m_FieldGenInfos.Count; ++i) { var fieldInfo = m_FieldGenInfos[i]; fieldInfo.FieldNameIndex = fieldNames.IndexOf(fieldInfo.FieldName); fieldInfo.FieldTypeIndex = fieldTypes.FindIndex(ft => trComparer.Equals(ft, fieldInfo.FieldType)); m_FieldGenInfos[i] = fieldInfo; } }