difference en el comportamiento de optionalAttribute (utilizado para declarar un parámetro opcional) en VS 2010 vs VS 2008

Un método simple de C # con un parámetro opcional declarado utilizando el atributo Opcional como

namespace  ClassLibrary11
{
   public class Class1
   {
      public int Foo(int a, int b, [Optional] int c)
      {
         return a + b + c;
      }
   }
}

En VS 2010.obj.Foo(3,4) salidas7 como se esperaba. Pero no en VS 2008 o antes, a menos que se proporcione algún valor predeterminado mediante el atributo DefaultParameterValue. Entonces una llamada aFoo(3,4) en VS2008 o antes produce un error:

Object of type 'System.Reflection.Missing' cannot be converted to type 'System.Double'

Tanto en VS 2008 como en VS 2010, si se usa la reflexión para invocar el método Foo, arroja el mismo error si no se proporciona el valor predeterminado para el parámetro opcional.

ClassLibrary11.Class1 cls = new ClassLibrary11.Class1();
MethodInfo mi = typeof(ClassLibrary11.Class1).GetMethod("Foo");
Object[] objarr = new Object[] {1,2, Missing.Value}; 
Object res = mi.Invoke(cls, objarr);

Entonces la pregunta es:

Entonces, ¿cómo es que el compilador VS 2010 se encarga de asignar el valor predeterminado al parámetro opcional pero el framework 4.0 no lo hace por reflexión?

Respuestas a la pregunta(2)

Su respuesta a la pregunta