2012-06-12 3 views
15

Кто-нибудь знает, как создать экземпляр класса с помощью конструктора, который имеет только один параметр, который является необязательным?Activator.CreateInstance с необязательными параметрами

Я пытался как

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

и

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

Чтобы не увенчались успехом ... Я получаю MissingMethodException

+0

Определение необязательно , – leppie

+0

Дополнительные аргументы: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

ответ

21

Это сработало:

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

Для тех, кто столкнулся с этим ответом и был скомпрометирован [Комментарий MSDN] (http://msdn.microsoft. com/en-us/library/system.reflection.bindingflags.aspx) «Этот флаг должен использоваться только с Type.InvokeMember», надеюсь (этот ответ SO) (http://stackoverflow.com/questions/1295344/difference- между активатором-createinstance-and-typeoft-invokemember-with) сэкономит вам время, которое потребовалось мне, чтобы гарантировать, что вызов 'Activator.CreateInstance' также является безопасным использованием этого перечисления' BindingFlags' –

Смежные вопросы