public static bool IsEqual(this GenericArgumentCollection genArgs1, GenericArgumentCollection genArgs2) { if (genArgs1 == null && genArgs2 == null) { return(true); } if ((genArgs1 == null && genArgs2 != null) || (genArgs1 != null && genArgs2 == null)) { return(false); } if (genArgs1.Count != genArgs2.Count) { return(false); } for (int i = 0; i < genArgs1.Count; i++) { TypeReference type1 = genArgs1[i]; TypeReference type2 = genArgs2[i]; if (!type1.IsEqual(type2)) { return(false); } } return(true); }
/// <summary> /// A type reference to a generic contains the concrete types to fully declare it. /// Like List<string> where string is an argument to the generic type. /// </summary> /// <param name="sb"></param> /// <param name="coll"></param> static void PrintGenericArgumentCollection(StringBuilder sb, GenericArgumentCollection coll) { if (coll == null || coll.Count == 0) { return; } sb.Append("<"); for (int i = 0; i < coll.Count; i++) { TypeReference param = coll[i]; GenericInstanceType generic = param as GenericInstanceType; if (generic != null) { sb.Append(RemoveGenericParameterCountFromName(generic.Name)); PrintGenericArgumentCollection(sb, generic.GenericArguments); } else { sb.Append(TypeMapper.FullToShort(param.Name)); // Print recursive definition if (i != coll.Count - 1) { sb.Append(","); } } } sb.Append(">"); }