2012-06-12 22 views
15

Kann jemand eine Klasse mit einem Konstruktor instanziieren, der nur 1 Parameter hat, der optional ist?Activator.CreateInstance mit optionalen Parametern

Ich habe versucht beide

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

und

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

zu keinem Erfolg ... ich bin immer Missing

+0

optional definieren . – leppie

+0

Optionale Argumente: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

Antwort

21

Das funktionierte:

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

Für diejenigen, die auf diese Antwort stieß und durch den [MSDN Comment] (http://msdn.microsoft.com) stolperte. com/de-us/library/system.reflection.bindingflags.aspx) "Dieses Flag sollte nur mit Type.InvokeMember verwendet werden", hoffentlich [diese SO-Antwort] (http://stackoverflow.com/questions/1295344/difference- between-activator-creatintinance-and-typeoft-invokemember-with) spart Ihnen die Zeit, die ich brauchte, um sicherzustellen, dass der Aufruf von 'Activator.CreateInstance' auch eine sichere Verwendung dieser 'BindingFlags'-Enumeration ist –

Verwandte Themen