in src/Serialization/MethodAccessor.cs [73:101]
void LoadArguments(ILGenerator generator, Type[] paramsType)
{
for (int i = 0; i < paramsType.Length; i++)
{
generator.Emit(OpCodes.Ldarg_1);
switch (i)
{
case 0: generator.Emit(OpCodes.Ldc_I4_0); break;
case 1: generator.Emit(OpCodes.Ldc_I4_1); break;
case 2: generator.Emit(OpCodes.Ldc_I4_2); break;
case 3: generator.Emit(OpCodes.Ldc_I4_3); break;
case 4: generator.Emit(OpCodes.Ldc_I4_4); break;
case 5: generator.Emit(OpCodes.Ldc_I4_5); break;
case 6: generator.Emit(OpCodes.Ldc_I4_6); break;
case 7: generator.Emit(OpCodes.Ldc_I4_7); break;
case 8: generator.Emit(OpCodes.Ldc_I4_8); break;
default: generator.Emit(OpCodes.Ldc_I4, i); break;
}
generator.Emit(OpCodes.Ldelem_Ref);
if (paramsType[i].IsValueType())
{
generator.Emit(OpCodes.Unbox_Any, paramsType[i]);
}
else if (paramsType[i] != typeof(object))
{
generator.Emit(OpCodes.Castclass, paramsType[i]);
}
}
}