帶有可選參數A簡單的C#方法使用OptionalAttribute作爲差(用於聲明可選參數)在2010年VS VS VS 2008
namespace ClassLibrary11
{
public class Class1
{
public int Foo(int a, int b, [Optional] int c)
{
return a + b + c;
}
}
}
在2010 VS obj.Foo(3,4)
輸出7
聲明如預期。但不是在VS 2008或之前,除非有一些默認值是使用DefaultParameterValue Attribute提供的。因此,在VS2008或結果爲錯誤之前,Foo(3,4)
呼叫:
Object of type 'System.Reflection.Missing' cannot be converted to type 'System.Double'
在這兩個VS 2008和VS 2010中,如果反射用於調用方法FOO,那麼它會引發同樣的錯誤,如果默認值沒有提供可選參數。
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);
所以,問題是:
因此,如何是VS 2010編譯器會分配默認值可選參數的護理,但框架4.0通過反射不?