CK.Reflection.ILGeneratorExtension.StoreDefaultValueForOutParameter C# (CSharp) Method

StoreDefaultValueForOutParameter() public static method

Emits code that sets the parameter (that must be a 'ref' or 'out' parameter) to the default of its type. Handles static or instance methods and value or reference type.
public static StoreDefaultValueForOutParameter ( this g, ParameterInfo byRefParameter ) : void
g this This object.
byRefParameter System.Reflection.ParameterInfo The 'by ref' parameter.
return void
        public static void StoreDefaultValueForOutParameter( this ILGenerator g, ParameterInfo byRefParameter )
        {
            if( !byRefParameter.ParameterType.IsByRef ) throw new ArgumentException( "Parameter must be 'by ref'.", "byRefParameter" );
            Type pType = byRefParameter.ParameterType.GetElementType();
            // Adds 1 to skip 'this' parameter ?
            MethodBase m = (MethodBase)byRefParameter.Member;
            if( (m.CallingConvention & CallingConventions.HasThis) != 0 ) g.LdArg( byRefParameter.Position + 1 );
            else g.LdArg( byRefParameter.Position );
            if( pType.GetTypeInfo().IsValueType )
            {
                g.Emit( OpCodes.Initobj, pType );
            }
            else
            {
                g.Emit( OpCodes.Ldnull );
                g.Emit( OpCodes.Stind_Ref );
            }
        }