private static void GenerateDefaultParameterValue(this ParameterDefinition p, ILProcessor il) { if (p.ParameterType.HasGenericParameters || p.ParameterType.ContainsGenericParameter) { p.GenerateDefaultParameterValueForGenerics(il); return; } var parameterType = p.ParameterType.Resolve(); if (!parameterType.IsValueType) { il.Emit(OpCodes.Ldnull); } else { switch (parameterType.MetadataType) { case MetadataType.Boolean: case MetadataType.Char: case MetadataType.Int16: case MetadataType.UInt16: case MetadataType.Int32: case MetadataType.UInt32: case MetadataType.SByte: case MetadataType.Byte: il.Emit(OpCodes.Ldc_I4_0); break; case MetadataType.Int64: case MetadataType.UInt64: il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Conv_I8); break; case MetadataType.Single: il.Emit(OpCodes.Ldc_R4, 0.0); break; case MetadataType.Double: il.Emit(OpCodes.Ldc_R8, 0.0); break; case MetadataType.ByReference: break; case MetadataType.Array: il.Emit(OpCodes.Ldnull); break; case MetadataType.IntPtr: case MetadataType.UIntPtr: il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Conv_I); break; } } }