diferença no comportamento de optionalAttribute (usado para declarar um parâmetro opcional) no VS 2010 vs VS 2008

Um método C # simples com um parâmetro opcional declarado usando o OptionalAttribute como

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

Em VS 2010.obj.Foo(3,4) saídas7 como esperado. Mas não no VS 2008 ou antes, a menos que seja fornecido algum valor padrão usando o Atributo DefaultParameterValue. Então, uma ligação paraFoo(3,4) no VS2008 ou antes resulta em um erro:

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

No VS 2008 e no VS 2010, se a reflexão for usada para chamar o método Foo, ele lançará o mesmo erro se o valor padrão não for fornecido para o parâmetro opciona

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

Então a pergunta é:

ntão, como é que o compilador do VS 2010 se encarrega de atribuir o valor padrão ao parâmetro opcional, mas o framework 4.0 não é via reflexã