+
+#if MS_COMPATIBLE
+ public AParametersCollection InflateTypes (Type[] genArguments, Type[] argTypes)
+ {
+ AParametersCollection p = (AParametersCollection) MemberwiseClone (); // Clone ();
+
+ for (int i = 0; i < Count; ++i) {
+ if (types[i].IsGenericType) {
+ Type[] gen_arguments_open = new Type[types[i].GetGenericTypeDefinition ().GetGenericArguments ().Length];
+ Type[] gen_arguments = types[i].GetGenericArguments ();
+ for (int ii = 0; ii < gen_arguments_open.Length; ++ii) {
+ if (gen_arguments[ii].IsGenericParameter) {
+ Type t = argTypes[gen_arguments[ii].GenericParameterPosition];
+ gen_arguments_open[ii] = t;
+ } else
+ gen_arguments_open[ii] = gen_arguments[ii];
+ }
+
+ p.types[i] = types[i].GetGenericTypeDefinition ().MakeGenericType (gen_arguments_open);
+ continue;
+ }
+
+ if (types[i].IsGenericParameter) {
+ Type gen_argument = argTypes[types[i].GenericParameterPosition];
+ p.types[i] = gen_argument;
+ continue;
+ }
+ }
+
+ return p;
+ }
+#endif