internal static OverloadInfo/*!*/ CreateParamsArrayMethod(string/*!*/ name, Type/*!*/[]/*!*/ paramTypes, int paramsArrayIndex, int returnValue) {
var tb = Snippets.Shared.DefineType("<T>", typeof(object), false, false).TypeBuilder;
var mb = tb.DefineMethod(name, CompilerHelpers.PublicStatic, typeof(KeyValuePair<int, Array>), paramTypes);
var pb = mb.DefineParameter(1 + paramsArrayIndex, ParameterAttributes.None, "ps");
pb.SetCustomAttribute(new CustomAttributeBuilder(typeof(ParamArrayAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));
var il = mb.GetILGenerator();
il.Emit(OpCodes.Ldc_I4, returnValue);
il.Emit(OpCodes.Ldarg, paramsArrayIndex);
il.Emit(OpCodes.Newobj, typeof(KeyValuePair<int, Array>).GetConstructor(new[] { typeof(int), typeof(Array) }));
il.Emit(OpCodes.Ret);
return new ReflectionOverloadInfo(tb.CreateType().GetMethod(name, BindingFlags.Public | BindingFlags.Static));
}