2012-06-12 12 views
15

Czy ktoś wie, jak utworzyć instancję klasy przy użyciu konstruktora, który ma tylko 1 parametr, który jest opcjonalny?Activator.CreateInstance z opcjonalnymi parametrami

Próbowałem zarówno

(T)Activator.CreateInstance(typeof(T), new object[] { Type.Missing }); 

i

(T)Activator.CreateInstance(typeof(T), new object[] { }); 

aby bez powodzenia ... Dostaję MissingMethodException

+0

Zdefiniuj opcjonalne . – leppie

+0

Opcjonalne argumenty: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

Odpowiedz

21

To działało:

(T)Activator.CreateInstance(typeof(T), 
        BindingFlags.CreateInstance | 
        BindingFlags.Public | 
        BindingFlags.Instance | 
        BindingFlags.OptionalParamBinding,null, new object[] {Type.Missing },CultureInfo.CurrentCulture); 
+0

Dla tych, którzy przebrnęli przez tę odpowiedź i zostali potknięci przez [Komentarz MSDN] (http://msdn.microsoft. com/en-us/library/system.reflection.bindingflags.aspx) "Ta flaga powinna być używana tylko z Type.InvokeMember", mam nadzieję, że [ta odpowiedź SO] (http://stackoverflow.com/questions/1295344/difference- between-activator-createinstance-and-typeoft-invokemember-with) zaoszczędzi ci czasu zajęło mi zapewnienie, że wywołanie 'Activator.CreateInstance' jest również bezpiecznym użyciem tego wyliczenia' BindingFlags' –

Powiązane problemy