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 );
}
}