2012-06-12 42 views
15

Có ai biết làm thế nào để khởi tạo một lớp bằng cách sử dụng một hàm tạo chỉ có 1 tham số không bắt buộc?Activator.CreateInstance với các tham số tùy chọn

Tôi đã thử cả hai

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

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

Để không thành công ... Tôi nhận được MissingMethodException

+0

Xác định bắt buộc . – leppie

+0

Đối số tùy chọn: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

Trả lời

21

này làm việc:

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

Đối với những người chạy qua câu trả lời này và bị vấp phải bởi [MSDN Comment] (http://msdn.microsoft). com/en-us/library/system.reflection.bindingflags.aspx) "Cờ này chỉ nên được sử dụng với Type.InvokeMember", hy vọng [câu trả lời SO này] (http://stackoverflow.com/questions/1295344/difference- giữa-activator-createinstance-và-typeoft-invokemember-with) sẽ giúp bạn tiết kiệm thời gian cần thiết để đảm bảo rằng việc gọi 'Activator.CreateInstance' cũng là một cách sử dụng an toàn cho điều kiện' BindingFlags' đó –

Các vấn đề liên quan