public static GenericInstanceType ResolveGenericArguments(this GenericInstanceType self, GenericInstanceType inheritingOrImplementingType) { if (self.FullName == inheritingOrImplementingType.FullName) return self; var genericParameters = inheritingOrImplementingType.GetGenericResolvedTypeName(); var genericArguments = new TypeReference[self.GenericArguments.Count]; for (int i = 0; i < genericArguments.Length; i++) genericArguments[i] = genericParameters.ContainsKey(self.GenericArguments[i].FullName) ? genericParameters[self.GenericArguments[i].FullName] : self.GenericArguments[i]; return self.BetterResolve().MakeGenericInstanceType(genericArguments); }