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ã