示例#1
0
        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;
                }
            }
        }